4

我正在cucumber使用capybara

我有几个类似的错误。

对于步骤:

Then /I should see movies of rating 'PG' or 'R'/ do
  page.body.should match(/<td>PG<\/td>/)
  page.body.should match(/<td>R<\/td>/)
end

黄瓜错误:

undefined method `match' for #<Cucumber::Rails::World:...> (NoMethodError)
./features/step_definitions/movie_steps.rb:37:in 
   `/I should see movies of rating 'PG' or 'R'/'

对于步骤:

Then /I should see an empty table/ do
  page.body.scan(/<tr>/).length.should == 0
end

黄瓜错误:

undefined method `should' for 1:Fixnum (NoMethodError)
./features/step_definitions/movie_steps.rb:46:in 
      `/I should see an empty table/'

对于步骤:

Then /I should see all of the movies/ do
  Movie.find(:all).length.should page.body.scan(/<tr>/).length
end

undefined method `should' for 10:Fixnum (NoMethodError)
./features/step_definitions/movie_steps.rb:59:in 
    `/I should see all of the movies/'

整个步骤文件在这里

如您所见,这些错误非常相似,但我不明白是什么导致了这个问题。

4

3 回答 3

9

在我看来,您在 rspec-expectations 方面遇到了问题。尝试添加

require 'rspec/expectations'

到你的 env.rb 和你的 Gemfile 的等价物。

于 2012-06-17T20:56:43.250 回答
1

如果您使用 MiniTest 而不是 Rspec,请尝试assert

IE

assert page.body.scan(/<tr>/).length == 0, "Expected to not find <tr> in page. "
于 2013-07-19T20:07:12.227 回答
0

只是为了提供替代方案(认为@dabai 的解决方案可能是最好的),您可以使用断言代替,例如:

assert Movie.find(:all).length == page.body.scan(/<tr>/).length
于 2012-10-28T21:08:11.300 回答