Cucumber 不会接受 Capybara Minitest 规范断言
Cucumber wont accept Capybara Minitest Spec assertions
我在 Rails 4.2 中使用 Cucumber 和 Capybara,但我没有使用 RSpec。我一直坚持使用 Minitest。我在大部分测试中都使用 minitest:spec。
每当我尝试在 Cucumber 步骤中使用带有 minitest 或 minitest:spec 语法的断言时,我都会收到一条错误消息,指出断言方法未定义。例如这一步:
Then (/^the state selector has no states$/) do
page.wont_have_selector(".my-css-class", :visible)
end
给出这个错误
undefined method `refute_selector' for nil:NilClass (NoMethodError)
(page.wont_have_selector
是 minitest 方法的 minitest:spec 语法 refute_selector
)
我有一个包含此内容的文件 features/support/minitest.rb
require 'minitest'
require "minitest/rails/capybara"
require "minitest/spec"
module MiniTestAssertions
def self.extended(base)
base.extend(MiniTest::Assertions)
base.assertions = 0
end
attr_accessor :assertions
end
World(MiniTestAssertions)
这是我的 Gemfile 测试部分
group :development, :test do
gem 'byebug'
gem 'web-console', '~> 2.0'
gem 'spring'
gem 'mocha', require: false
gem 'cucumber-rails', require: false
gem 'database_cleaner'
end
group :test do
gem 'minitest-reporters'
gem 'minitest-rails-capybara'
gem 'minitest-spec-rails'
gem 'capybara_minitest_spec'
gem 'launchy'
gem 'selenium-webdriver'
gem 'poltergeist'
end
Gemfile.lock
包括以下内容
capybara (2.4.4)
capybara_minitest_spec (1.0.5)
cucumber (1.3.20)
cucumber-rails (1.4.2)
minitest (5.7.0)
minitest-capybara (0.7.2)
minitest-metadata (0.5.3)
minitest-rails (2.2.0)
minitest-rails-capybara (2.1.1)
minitest-spec-rails (5.2.2)
rails (4.2.1)
编辑
只有 Capybara 特定的 Minitest 断言在 Cucumber 步骤文件中无法识别。如果我把步骤内容改成这样:
assert true
refute false
然后就过去了。此外,Capybara Minitest 断言在 test/features
目录中工作正常,用于在 Cucumber 之外进行集成测试。
我想我必须向 features/suport/minitest.rb
添加一些内容,以便将 Capybara Minitest 断言添加到 Cucumber World,但我不知道它是什么。
编辑
实际上只有 Capybara 的最小测试断言的规范版本出现了问题。如果我将步骤的内容更改为:
refute_selector(".my-css-class", :visible)
然后就可以了。
编辑
我认为是 capybara_minitest_spec gem 中的 bug #10 我重新打开了。
你可以试试
require 'capybara/cucumber'
在你的 minitest.rb 中。如果这导致问题,因为它需要 'capybara/rspec/matchers'(尽管该文件实际上并不需要 rspec),那么您可以只执行
World(Capybara::DSL)
然后实现测试环境所需的任何前后挂钩(参见 cucumber.rb)
将此代码放入features/support/env.rb
Before do
Thread.current[:current_spec] = self
end
这来自 ordinaryzelig's fix,用于 capybara_minitest_spec 添加对 Cucumber 的支持。
我在 Rails 4.2 中使用 Cucumber 和 Capybara,但我没有使用 RSpec。我一直坚持使用 Minitest。我在大部分测试中都使用 minitest:spec。
每当我尝试在 Cucumber 步骤中使用带有 minitest 或 minitest:spec 语法的断言时,我都会收到一条错误消息,指出断言方法未定义。例如这一步:
Then (/^the state selector has no states$/) do
page.wont_have_selector(".my-css-class", :visible)
end
给出这个错误
undefined method `refute_selector' for nil:NilClass (NoMethodError)
(page.wont_have_selector
是 minitest 方法的 minitest:spec 语法 refute_selector
)
我有一个包含此内容的文件 features/support/minitest.rb
require 'minitest'
require "minitest/rails/capybara"
require "minitest/spec"
module MiniTestAssertions
def self.extended(base)
base.extend(MiniTest::Assertions)
base.assertions = 0
end
attr_accessor :assertions
end
World(MiniTestAssertions)
这是我的 Gemfile 测试部分
group :development, :test do
gem 'byebug'
gem 'web-console', '~> 2.0'
gem 'spring'
gem 'mocha', require: false
gem 'cucumber-rails', require: false
gem 'database_cleaner'
end
group :test do
gem 'minitest-reporters'
gem 'minitest-rails-capybara'
gem 'minitest-spec-rails'
gem 'capybara_minitest_spec'
gem 'launchy'
gem 'selenium-webdriver'
gem 'poltergeist'
end
Gemfile.lock
包括以下内容
capybara (2.4.4)
capybara_minitest_spec (1.0.5)
cucumber (1.3.20)
cucumber-rails (1.4.2)
minitest (5.7.0)
minitest-capybara (0.7.2)
minitest-metadata (0.5.3)
minitest-rails (2.2.0)
minitest-rails-capybara (2.1.1)
minitest-spec-rails (5.2.2)
rails (4.2.1)
编辑
只有 Capybara 特定的 Minitest 断言在 Cucumber 步骤文件中无法识别。如果我把步骤内容改成这样:
assert true
refute false
然后就过去了。此外,Capybara Minitest 断言在 test/features
目录中工作正常,用于在 Cucumber 之外进行集成测试。
我想我必须向 features/suport/minitest.rb
添加一些内容,以便将 Capybara Minitest 断言添加到 Cucumber World,但我不知道它是什么。
编辑
实际上只有 Capybara 的最小测试断言的规范版本出现了问题。如果我将步骤的内容更改为:
refute_selector(".my-css-class", :visible)
然后就可以了。
编辑
我认为是 capybara_minitest_spec gem 中的 bug #10 我重新打开了。
你可以试试
require 'capybara/cucumber'
在你的 minitest.rb 中。如果这导致问题,因为它需要 'capybara/rspec/matchers'(尽管该文件实际上并不需要 rspec),那么您可以只执行
World(Capybara::DSL)
然后实现测试环境所需的任何前后挂钩(参见 cucumber.rb)
将此代码放入features/support/env.rb
Before do
Thread.current[:current_spec] = self
end
这来自 ordinaryzelig's fix,用于 capybara_minitest_spec 添加对 Cucumber 的支持。