黄瓜+ capybara = has_content?每次都返回true

时间:2014-06-25 08:44:12

标签: ruby-on-rails ruby-on-rails-4 cucumber capybara minitest

我正在使用以下内容:

minitest 5.3.5
cucumber 1.3.15
capybara 2.3.0
capybara_minitest_spec 1.0.2
rails 4.1.1
cucumber-rails 1.4.1

和我的黄瓜/水豚代码

Then(/^I should see "(.*?)"$/) do |string|
  page.has_content?(string)
end

使用任何字符串,在页面上是独立的还是不返回true。我试过使用capybara_minitest_spec gem,我的代码变成了

Then(/^I should see "(.*?)"$/) do |string|
  page.must_have_content(string)
end

然后我有错误

Then I should see "Test" # features/step_definitions/pages_steps.rb:9
  undefined method `assert_page_has_content' for nil:NilClass (NoMethodError)
  (eval):4:in `must_have_content'
  ./features/step_definitions/pages_steps.rb:10:in `/^I should see "(.*?)"$/'
  features/can_access_home.feature:7:in `Then I should see "Test"'

太奇怪了。使用save_and_open_page,我看到我的页面没有任何问题。你可以帮我解决一下吗?

PS:我使用minitest而不是rspec

2 个答案:

答案 0 :(得分:1)

Then(/^I should see "(.*?)"$/) do |string|
  page.has_content?(string)
end

这不是断言,这是一个返回布尔值的方法。断言会抛出异常,这就是测试失败的原因。

如果要断言字符串的存在,则必须使用:

Then(/^I should see "(.*?)"$/) do |string|
  assert page.has_content?("Home#index")
end

page.must_have_content实际上做同样的事情,除了你的错误说page是零。

答案 1 :(得分:0)

我已解决以下问题

Then(/^I should see "(.*?)"$/) do |string|
  assert page.has_content?(string)
end