ruby-on-rails - 如何在请求规范中 stub ApplicationController 方法

标签 ruby-on-rails ruby rspec capybara

我需要在 Rspec/capybara 请求规范中 stub current_user 方法的响应。该方法在 ApplicationController 中定义并使用 helper_method。该方法应该只返回一个用户 ID。在测试中,我希望此方法每次都返回相同的用户 ID。

或者,我可以通过在规范中设置 session[:user_id] 来解决我的问题(这是 current_user 返回的内容)...但这似乎不是要么工作。

这两种可能吗?

编辑:

这是我得到的(它不工作。它只是运行正常的 current_user 方法)。

require 'spec_helper'

describe "Login" do

   before(:each) do
     ApplicationController.stub(:current_user).and_return(User.first)
   end

  it "logs in" do
    visit '/'
    page.should have_content("Hey there user!")
  end

end

同样无效:

require 'spec_helper'

describe "Login" do

  before(:each) do
    @mock_controller = mock("ApplicationController") 
    @mock_controller.stub(:current_user).and_return(User.first)
  end

  it "logs in" do
    visit '/'
    page.should have_content("Hey there user!")
  end

end

最佳答案

skalee 似乎在评论中提供了正确答案。

如果您尝试 stub 的方法是实例方法(很可能)而不是类方法,那么您需要使用:

ApplicationController.any_instance.stub(:current_user)

关于ruby-on-rails - 如何在请求规范中 stub ApplicationController 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7448974/

相关文章:

ruby-on-rails - 如何测试向两个收件人发送电子邮件(Rspec)

ruby-on-rails - Rspec Rails - 在请求规范中模拟远程请求

ruby-on-rails - Rspec 应该等待线程完成

mysql - 无法在 Windows 7 64 位上安装 openproject - Fiddle :Module 的未定义方法 `dlopen'

ruby-on-rails - 编写Redmine插件的良好文档

ruby-on-rails - 从实例方法中访问 ActiveSupport::Concern 类方法

ruby - 在使用 Capistrano 部署之前标记发布

ruby - 检查字符串是否包含数组中的子字符串并获得匹配项

ruby-on-rails - 将方法委托(delegate)给 ApplicationHelper 中具有相同名称的类方法

ruby-on-rails - 如何检查 capybara 中的复选框?