黄瓜未定义的方法

时间:2012-06-17 19:57:45

标签: ruby-on-rails rspec cucumber rspec-expectations

我正在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/'

整个步骤文件是here

正如您所看到的,这些错误非常相似,但我无法理解导致此问题的原因。

3 个答案:

答案 0 :(得分:9)

在我看来,您对rspec期望存在问题。尝试添加

require 'rspec/expectations'

到你的env.rb和等同于你的Gemfile。

答案 1 :(得分:1)

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

assert page.body.scan(/<tr>/).length == 0, "Expected to not find <tr> in page. "

答案 2 :(得分:0)

只是提供一个替代方案(想想@ dabai的解决方案可能是最好的),你可以使用断言,比如:

assert Movie.find(:all).length == page.body.scan(/<tr>/).length