未定义的方法should_receive'for

时间:2013-07-03 15:24:47

标签: ruby-on-rails rspec cucumber

我正在写黄瓜的UserLogin功能,我必须测试用户是否成功登录。除了最后一行,一切顺利:

Then I should be redirected to my home page

问题是它通常不是登录而且需要票证。票证是从ApplicationController#login_ticket获得的。我想把它存根,所以我写了这个网页步骤:

Then(/^I should be redirected to my home page$/) do
  ApplicationController.should_receive(:login_ticket).and_return("2081677")
  current_path.should eq root_path
end

但它失败并留言:

  

然后我应该被重定向到我的主页#   特征/ step_definitions / web_steps.rb:13         未定义的方法should_receive' for ApplicationController:Class (NoMethodError) ./features/step_definitions/web_steps.rb:14:in / ^我应该重定向到我的主页$ /'         features / UserLogin.feature:9:在`然后我应该被重定向到我的主页'

这里有什么问题?

1 个答案:

答案 0 :(得分:1)

should_receive并不是真正的存根,它正在设置模拟期望。请尝试以下方法:

ApplicationController.stub(:login_ticket) { "2081677" }

您还需要验证RSpec是否处于活动状态

require 'cucumber/rspec/doubles'

更多:https://github.com/cucumber/cucumber/wiki/Mocking-and-Stubbing-with-Cucumber