diff --git a/.travis.yml b/.travis.yml index 15ada837..3e813d89 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,16 +1,20 @@ rvm: - 2.2.9 - - 2.3.6 - - 2.4.3 - - 2.5.0 + - 2.3.7 + - 2.4.4 + - 2.5.1 - ruby-head +addons: + firefox: latest + # whitelist branches: only: - master gemfile: + - gemfiles/rails_5_2.gemfile - gemfiles/rails_5_1.gemfile - gemfiles/rails_5_0.gemfile - gemfiles/rails_4_2.gemfile @@ -20,15 +24,14 @@ gemfile: matrix: fast_finish: true exclude: - - rvm: 2.4.3 + - rvm: 2.4.4 gemfile: gemfiles/rails_4_0.gemfile - - rvm: 2.4.3 + - rvm: 2.4.4 gemfile: gemfiles/rails_4_1.gemfile - - rvm: 2.5.0 + - rvm: 2.5.1 gemfile: gemfiles/rails_4_0.gemfile - - rvm: 2.5.0 + - rvm: 2.5.1 gemfile: gemfiles/rails_4_1.gemfile - - rvm: ruby-head gemfile: gemfiles/rails_4_0.gemfile - rvm: ruby-head @@ -37,3 +40,4 @@ matrix: - rvm: ruby-head before_install: gem update --remote bundler +before_script: geckodriver -V diff --git a/Appraisals b/Appraisals index d4a939e6..d28d5b58 100644 --- a/Appraisals +++ b/Appraisals @@ -4,7 +4,7 @@ appraise "rails_4_0" do gem "railties", "~> 4.0.0" gem "capybara", "~> 2.0" gem "selenium-webdriver", "~> 3.4.1" - gem "geckodriver-helper", "~> 0.0.4" + gem "geckodriver-helper", "~> 0.0.5" gem "turn", "~> 0.9.6" gem "test-unit", '~> 3.1.5' gem "rspec-rails", "~> 3.1.0" @@ -23,7 +23,7 @@ appraise "rails_4_1" do gem "railties", "~> 4.1.0" gem "capybara", "~> 2.0" gem "selenium-webdriver", "~> 3.4.1" - gem "geckodriver-helper", "~> 0.0.4" + gem "geckodriver-helper", "~> 0.0.5" gem "rspec-rails", "~> 3.1.0" gem "sass-rails", "~> 4.0.0" gem "coffee-rails", "~> 4.0.0" @@ -39,7 +39,7 @@ appraise "rails_4_2" do gem "railties", "~> 4.2.1" gem "capybara", "~> 2.0" gem "selenium-webdriver", "~> 3.4.1" - gem "geckodriver-helper", "~> 0.0.4" + gem "geckodriver-helper", "~> 0.0.5" gem "rspec-rails", "~> 3.1.0" gem "sass-rails", "~> 5.0" gem "coffee-rails", "~> 4.1.0" @@ -55,7 +55,7 @@ appraise "rails_5_0" do gem "railties", "~> 5.0.0" gem "capybara", "~> 2.7.1" gem "selenium-webdriver", "~> 3.9.0" - gem "geckodriver-helper", "~> 0.0.4" + gem "geckodriver-helper", "~> 0.0.5" gem "rspec-rails", "~> 3.5.0" gem "sass-rails", "~> 5.0" gem "coffee-rails", "~> 4.2.0" @@ -71,7 +71,7 @@ appraise "rails_5_1" do gem "railties", "~> 5.1.0" gem "capybara", "~> 2.7.1" gem "selenium-webdriver", "~> 3.9.0" - gem "geckodriver-helper", "~> 0.0.4" + gem "geckodriver-helper", "~> 0.0.5" gem "rspec-rails", "~> 3.5.0" gem "sass-rails", "~> 5.0" gem "coffee-rails", "~> 4.2.0" @@ -80,3 +80,17 @@ appraise "rails_5_1" do # Rails 5 requires database cleaner 1.1 gem "database_cleaner", ">= 1.1.0" end + +appraise "rails_5_2" do + gem "rails", "~> 5.2" + gem "railties", "~> 5.2" + gem "capybara", "~> 3" + gem "selenium-webdriver", "~> 3.11" + gem "geckodriver-helper", "~> 0.0.5" + gem "rspec-rails", "~> 3.7" + gem "sass-rails", "~> 5.0" + gem "coffee-rails", "~> 4.2.0" + gem "uglifier", "~> 4.1" + gem "sqlite3", "~> 1.3.13" + gem "database_cleaner", ">= 1.1" +end diff --git a/cucumber-rails.gemspec b/cucumber-rails.gemspec index 4a3a4489..7636c764 100644 --- a/cucumber-rails.gemspec +++ b/cucumber-rails.gemspec @@ -3,7 +3,7 @@ $LOAD_PATH.unshift File.expand_path("../lib", __FILE__) Gem::Specification.new do |s| s.name = 'cucumber-rails' - s.version = '1.5.0' + s.version = '1.6.0' s.authors = ["Aslak Hellesøy", "Dennis Blöte", "Rob Holland"] s.description = "Cucumber Generator and Runtime for Rails" s.summary = "#{s.name}-#{s.version}" @@ -12,10 +12,10 @@ Gem::Specification.new do |s| s.license = 'MIT' - s.add_runtime_dependency('capybara', ['>= 1.1.2', '< 3']) + s.add_runtime_dependency('capybara', ['>= 1.1.2', '< 4']) s.add_runtime_dependency('cucumber', ['>= 3.0.2', '< 4']) - s.add_runtime_dependency('nokogiri', '~> 1.5') - s.add_runtime_dependency('railties', ['>= 4', '< 5.2']) + s.add_runtime_dependency('nokogiri', '~> 1.8') + s.add_runtime_dependency('railties', ['>= 4', '< 6']) s.add_runtime_dependency('mime-types', ['>= 1.17', '< 4']) # Main development dependencies @@ -26,7 +26,7 @@ Gem::Specification.new do |s| s.add_development_dependency('bundler', '>= 1.3.5') s.add_development_dependency('selenium-webdriver', '>= 3.4.1') s.add_development_dependency('database_cleaner', '>= 1.0.0') - s.add_development_dependency('factory_girl', '>= 3.2') + s.add_development_dependency('factory_bot', '>= 3.2') s.add_development_dependency('rake', '>= 0.9.2.2') s.add_development_dependency('rspec', '~> 3.0') s.add_development_dependency('rails') diff --git a/features/choose_javascript_database_strategy.feature b/features/choose_javascript_database_strategy.feature index 38d93966..68d2528a 100644 --- a/features/choose_javascript_database_strategy.feature +++ b/features/choose_javascript_database_strategy.feature @@ -3,7 +3,7 @@ Feature: Choose javascript database strategy When running a scenario with the @javascript tag, Capybara will fire up a web server in the same process in a separate thread to your cukes. By default, this means ActiveRecord will give it a separate database connection, which in turn means data you put into your database from - Cucumber step definitions (e.g. using FactoryGirl) won't be visible to the web server + Cucumber step definitions (e.g. using FactoryBot) won't be visible to the web server until the database transaction is committed. So if you use a transaction strategy for cleaning up your database at the end of a scenario, diff --git a/features/emulate_javascript.feature b/features/emulate_javascript.feature index 6b2b08f5..14b55237 100644 --- a/features/emulate_javascript.feature +++ b/features/emulate_javascript.feature @@ -16,12 +16,12 @@ Feature: Emulate Javascript And I write to "features/step_definitions/s.rb" with: """ Given /^there is a widget named "([^"]*)"$/ do |name| - FactoryGirl.create(:widget, name: name) + FactoryBot.create(:widget, name: name) end """ And I write to "features/support/factories.rb" with: """ - FactoryGirl.define do + FactoryBot.define do factory :widget do name 'testwidget' end @@ -73,12 +73,12 @@ Feature: Emulate Javascript And I write to "features/step_definitions/s.rb" with: """ Given /^there is a widget named "([^"]*)"$/ do |name| - FactoryGirl.create(:widget, name: name) + FactoryBot.create(:widget, name: name) end """ And I write to "features/support/factories.rb" with: """ - FactoryGirl.define do + FactoryBot.define do factory :widget do name 'testwidget' end @@ -91,4 +91,4 @@ Feature: Emulate Javascript 1 scenario (1 passed) 8 steps (8 passed) """ - \ No newline at end of file + diff --git a/features/no_database.feature b/features/no_database.feature index b97202a5..7031bbb4 100644 --- a/features/no_database.feature +++ b/features/no_database.feature @@ -26,19 +26,8 @@ Feature: No Database """ require 'cucumber/rails' """ - # Remove DatabaseCleaner and SQLite - And I write to "Gemfile" with: - """ - source 'http://rubygems.org' - gem 'rails' - gem "cucumber-rails", group: :test, path: "../../.." - gem "capybara", group: :test - gem "rspec-rails", group: :test - if RUBY_VERSION >= '2.0.0' - gem 'sass-rails' - gem 'uglifier' - end - """ + And I remove the 'database_cleaner' gem from the Gemfile + And I remove the 'sqlite' gem from the Gemfile And I write to "app/controllers/posts_controller.rb" with: """ class PostsController < ApplicationController diff --git a/features/step_definitions/cucumber_rails_steps.rb b/features/step_definitions/cucumber_rails_steps.rb index 7f0f5d9c..1e42cf3c 100644 --- a/features/step_definitions/cucumber_rails_steps.rb +++ b/features/step_definitions/cucumber_rails_steps.rb @@ -27,7 +27,7 @@ def install_cucumber_rails(*options) gem 'geckodriver-helper', group: :test gem 'rspec-rails', group: :test gem 'database_cleaner', group: :test unless options.include?(:no_database_cleaner) - gem 'factory_girl', group: :test unless options.include?(:no_factory_girl) + gem 'factory_bot', group: :test unless options.include?(:no_factory_bot) # Newer versions of rake remove a method used by RSpec older versions # See https://stackoverflow.com/questions/35893584/nomethoderror-undefined-method-last-comment-after-upgrading-to-rake-11#35893625 if Gem::Version.new(RSpec::Support::Version::STRING) < Gem::Version.new('3.4.4') @@ -78,14 +78,14 @@ def fixture(path) Given /^I have created a new Rails app with no database and installed cucumber-rails$/ do rails_new args: '--skip-active-record' - install_cucumber_rails :no_database_cleaner, :no_factory_girl + install_cucumber_rails :no_database_cleaner, :no_factory_bot overwrite_file('features/support/env.rb', "require 'cucumber/rails'\n") create_web_steps end Given /^I have created a new Rails app "(.*?)" with no database and installed cucumber\-rails$/ do |app_name| rails_new name: app_name, args: '--skip-active-record' - install_cucumber_rails :no_database_cleaner, :no_factory_girl + install_cucumber_rails :no_database_cleaner, :no_factory_bot overwrite_file('features/support/env.rb', "require 'cucumber/rails'\n") create_web_steps end @@ -100,7 +100,6 @@ def fixture(path) Capybara.register_driver :selenium do |app| browser_options = ::Selenium::WebDriver::Firefox::Options.new() browser_options.args << '--headless' - Capybara::Selenium::Driver.new(app, browser: :firefox, options: browser_options) end } @@ -119,3 +118,20 @@ def fixture(path) step 'the exit status should be 0' step 'the output should contain:', string end + +Given("I remove the {string} gem from the Gemfile") do |gem_name| + run 'pwd' + app_path = last_command_started.output.strip + gemfile_path = File.join(app_path, 'Gemfile') + + content = File.open(gemfile_path, 'r').readlines + new_content = [] + + content.each do |line| + next if line =~ /gem ["|']#{gem_name}["|'].*/ + + new_content << line + end + + overwrite_file(gemfile_path, new_content.join("\r\n")) +end \ No newline at end of file diff --git a/gemfiles/rails_4_0.gemfile b/gemfiles/rails_4_0.gemfile index a930c497..de261954 100644 --- a/gemfiles/rails_4_0.gemfile +++ b/gemfiles/rails_4_0.gemfile @@ -7,7 +7,7 @@ gem "rails", "~> 4.0.0" gem "railties", "~> 4.0.0" gem "capybara", "~> 2.0" gem "selenium-webdriver", "~> 3.4.1" -gem "geckodriver-helper", "~> 0.0.4" +gem "geckodriver-helper", "~> 0.0.5" gem "turn", "~> 0.9.6" gem "test-unit", "~> 3.1.5" gem "rspec-rails", "~> 3.1.0" diff --git a/gemfiles/rails_4_1.gemfile b/gemfiles/rails_4_1.gemfile index 41b4b130..8e6fa68c 100644 --- a/gemfiles/rails_4_1.gemfile +++ b/gemfiles/rails_4_1.gemfile @@ -7,7 +7,7 @@ gem "rails", "~> 4.1.0" gem "railties", "~> 4.1.0" gem "capybara", "~> 2.0" gem "selenium-webdriver", "~> 3.4.1" -gem "geckodriver-helper", "~> 0.0.4" +gem "geckodriver-helper", "~> 0.0.5" gem "rspec-rails", "~> 3.1.0" gem "sass-rails", "~> 4.0.0" gem "coffee-rails", "~> 4.0.0" diff --git a/gemfiles/rails_4_2.gemfile b/gemfiles/rails_4_2.gemfile index 748f55c6..808cd6a1 100644 --- a/gemfiles/rails_4_2.gemfile +++ b/gemfiles/rails_4_2.gemfile @@ -6,7 +6,7 @@ gem "rails", "~> 4.2.1" gem "railties", "~> 4.2.1" gem "capybara", "~> 2.0" gem "selenium-webdriver", "~> 3.4.1" -gem "geckodriver-helper", "~> 0.0.4" +gem "geckodriver-helper", "~> 0.0.5" gem "rspec-rails", "~> 3.1.0" gem "sass-rails", "~> 5.0" gem "coffee-rails", "~> 4.1.0" diff --git a/gemfiles/rails_5_0.gemfile b/gemfiles/rails_5_0.gemfile index d6bbe7e7..21689579 100644 --- a/gemfiles/rails_5_0.gemfile +++ b/gemfiles/rails_5_0.gemfile @@ -6,7 +6,7 @@ gem "rails", "~> 5.0.0" gem "railties", "~> 5.0.0" gem "capybara", "~> 2.7.1" gem "selenium-webdriver", "~> 3.9.0" -gem "geckodriver-helper", "~> 0.0.4" +gem "geckodriver-helper", "~> 0.0.5" gem "rspec-rails", "~> 3.5.0" gem "sass-rails", "~> 5.0" gem "coffee-rails", "~> 4.2.0" diff --git a/gemfiles/rails_5_1.gemfile b/gemfiles/rails_5_1.gemfile index 0f16cd27..2911becd 100644 --- a/gemfiles/rails_5_1.gemfile +++ b/gemfiles/rails_5_1.gemfile @@ -6,7 +6,7 @@ gem "rails", "~> 5.1.0" gem "railties", "~> 5.1.0" gem "capybara", "~> 2.7.1" gem "selenium-webdriver", "~> 3.9.0" -gem "geckodriver-helper", "~> 0.0.4" +gem "geckodriver-helper", "~> 0.0.5" gem "rspec-rails", "~> 3.5.0" gem "sass-rails", "~> 5.0" gem "coffee-rails", "~> 4.2.0" diff --git a/gemfiles/rails_5_2.gemfile b/gemfiles/rails_5_2.gemfile new file mode 100644 index 00000000..dcadd9a1 --- /dev/null +++ b/gemfiles/rails_5_2.gemfile @@ -0,0 +1,17 @@ +# This file was generated by Appraisal + +source "https://rubygems.org" + +gem "rails", "~> 5.2" +gem "railties", "~> 5.2" +gem "capybara", "~> 3.0" +gem "selenium-webdriver", "~> 3.11" +gem "geckodriver-helper", "~> 0.0.5" +gem "rspec-rails", "~> 3.7" +gem "sass-rails", "~> 5.0" +gem "coffee-rails", "~> 4.2" +gem "uglifier", "~> 4.1" +gem "sqlite3", "~> 1.3.13" +gem "database_cleaner", ">= 1.6.2" + +gemspec path: "../" diff --git a/lib/cucumber/rails/capybara/javascript_emulation.rb b/lib/cucumber/rails/capybara/javascript_emulation.rb index 95752342..8202b530 100644 --- a/lib/cucumber/rails/capybara/javascript_emulation.rb +++ b/lib/cucumber/rails/capybara/javascript_emulation.rb @@ -9,7 +9,7 @@ def self.included(base) end end - def click_with_javascript_emulation + def click_with_javascript_emulation(*) if link_with_non_get_http_method? ::Capybara::RackTest::Form.new(driver, js_form(element_node.document, self[:href], emulated_method)).submit(self) else