我已经生成了运行rails g devise:views的Devise视图,现在想要测试它们。
这就是我的想法:
require 'spec_helper'
describe "devise/sessions/new" do
before do
render
end
it "renders the form to log in" do
rendered.should have_selector("form", action: user_session_path, method: :post) do |form|
end
end
end对于render语句,它提供了undefined local variable or method 'resource'。在googling around之后,我发现我应该添加
@user.should_receive(:resource).and_return(User.new)在render语句之前-但它仍然给我相同的错误,并且我不确定如何使用它。
我做错了什么?谢谢你的帮助。
发布于 2013-01-21 02:20:24
你知道吗?我发现this answer中有人有类似的问题。解决方案是在应用程序帮助器中包含以下代码:
def resource_name
:user
end
def resource
@resource ||= User.new
end
def devise_mapping
@devise_mapping ||= Devise.mappings[:user]
end这是必要的,因为devise在其控制器中使用了某些辅助方法。然而,如果我从我的规范访问视图,这些辅助方法是不可用的,因此我的测试失败。将这些方法放在应用程序帮助器中,使它们可以在整个应用程序中访问,包括我的规范,甚至测试通过!
发布于 2013-11-12 22:18:48
只是另一种想法,以防任何人遇到同样的问题。我并不热衷于仅仅为了让测试通过而将代码添加到我的助手中,所以我最终在测试中将此代码添加到了之前的代码块中:
before do
view.stub(:resource).and_return(User.new)
view.stub(:resource_name).and_return(:user)
view.stub(:devise_mapping).and_return(Devise.mappings[:user])
end发布于 2015-07-24 02:16:10
在rspec中,有一个配置不允许您清除未定义的方法。在Rails4中,这甚至是标准行为:
# spec/spec_helper.rb
config.mock_with :rspec do |mocks|
mocks.verify_partial_doubles = true
end正因为如此,得票率最高的答案对设备帮助者不起作用。将verify_partial_doubles更改为false或使用实际的帮助器。
https://stackoverflow.com/questions/14426746
复制相似问题