Ruby on rails Cucumber不接受Capybara Minitest规范断言

Ruby on rails Cucumber不接受Capybara Minitest规范断言,ruby-on-rails,cucumber,capybara,minitest,Ruby On Rails,Cucumber,Capybara,Minitest,我在Rails 4.2中使用Cucumber和Capybara,但我没有使用RSpec。我一直坚持迷你测试。我在大多数测试中都使用了minitest:spec 每当我尝试在cumber步骤中使用minitest或minitest:spec语法进行断言时,我都会收到一个错误,表明断言方法未定义。例如,此步骤: Then (/^the state selector has no states$/) do page.wont_have_selector(".my-css-class", :visi

我在Rails 4.2中使用Cucumber和Capybara,但我没有使用RSpec。我一直坚持迷你测试。我在大多数测试中都使用了minitest:spec

每当我尝试在cumber步骤中使用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\u have\u selector
是minitest方法的minitest:spec语法
returne\u 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)
这是我的GEM文件的测试部分

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)
编辑

在Cucumber step文件中,只有特定于Capybara的Minitest断言未被识别。如果我将步骤内容更改为:

assert true
refute false
然后就过去了。此外,Capybara Minitest断言在
test/features
目录中工作良好,用于在Cucumber之外进行集成测试

我想我必须向
features/support/minitest.rb
添加一些东西,以便将水豚minitest断言添加到Cucumber世界中,但我不知道它是什么

编辑

实际上,只有Capybara的minitest断言的规范版本才出现了问题。如果我将步骤的内容更改为:

refute_selector(".my-css-class", :visible)
然后它就起作用了

编辑

我想我重新打开的是水豚星的小型测试宝石。

你可以试试

require 'capybara/cucumber'
在minitest.rb中。如果因为需要“capybara/rspec/matchers”(尽管该文件实际上不需要rspec)而导致问题,那么您可以这样做

World(Capybara::DSL)

然后实现测试环境所需的任何前后挂钩(请参见)

将此代码放入
features/support/env.rb

Before do
  Thread.current[:current_spec] = self
end

这是为capybara_minitest_规范添加对Cucumber的支持而编写的。

我尝试将这两行代码放入
minitest.rb
中,但似乎没有任何效果。本机capybara方法与普通minitest断言一样工作正常。我认为缺少的是创业板提供的主张。我尝试过添加
World(Capybara::Assertions)
,但似乎也没有效果。重读您的错误描述,我认为您可能已经包含了这些方法,但这确实是一个为什么要调用它们的问题您是对的!我刚刚意识到,如果我在步骤
returne\u选择器(“.mycss class.”:visible)
中输入,它就会工作!所以这一定是因为gem允许我使用spec格式和Minitest以及Capybara