我试图在将Devise的user_signed_in?
方法添加到相关视图模板后,将之前传递的rspec“视图规范”通过。模板看起来像这样:
<% if user_signed_in? %>
Welcome back.
<% else %>
Please sign in.
<% endif %>
传递的视图规范看起来像这样:
require "spec_helper"
describe "home/index.html.erb" do
it "asks you to sign in if you are not signed in" do
render
rendered.should have_content('Please sign in.')
end
end
将呼叫添加到user_signed_in?
后产生的错误是:
1) home/index.html.erb asks you to sign in if you are not signed in
Failure/Error: render
ActionView::Template::Error:
undefined method `authenticate' for nil:NilClass
# ./app/views/home/index.html.erb:1:in `_app_views_home_index_html_erb__1932916999377371771_70268384974540'
# ./spec/views/home/index.html.erb_spec.rb:6:in `block (2 levels) in <top (required)>'
网上有很多关于这个错误的引用,但是我还没有找到足够描述的答案,我可以再次通过测试。我认为这个问题与视图有关(正在与任何模型/控制器隔离测试)没有一些关键的Devise基础设施可用。您的建议表示赞赏。
此外,一旦测试通过,我将如何测试其他路径(用户已经登录)?我认为它会非常相似。感谢。
答案 0 :(得分:39)
您收到的错误是因为您需要包含设计测试助手
通常你会将这个(你可能已经拥有)添加到spec / support / devise.rb
RSpec.configure do |config|
config.include Devise::TestHelpers, :type => :controller
end
但是既然你正在创建一个视图规范,你会想要这样的东西:
RSpec.configure do |config|
config.include Devise::TestHelpers, :type => :controller
config.include Devise::TestHelpers, :type => :view
end
答案 1 :(得分:1)
看一下Rails Composer,这将指导您完成一个新的rails项目创建,其中包括测试,UI等选项。
创建一个示例项目,很酷的是它将为您创建所有测试,包括使用设计进行视图测试。然后你可以从那些测试规范中得到一个想法。
为我工作:D
HTH