我想在将Devise的user_signed_in?方法添加到相关的视图模板后,尝试获得之前传递的rspec"视图规范" .模板看起来像这样:
<% if user_signed_in? %>
Welcome back.
<% else %>
Please sign in.
<% endif %>
Run Code Online (Sandbox Code Playgroud)
该视图规范是经过看起来是这样的:
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
Run Code Online (Sandbox Code Playgroud)
添加调用后产生的错误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 …Run Code Online (Sandbox Code Playgroud) 我已经生成了Devise的视图rails g devise:views,现在想测试它们.
这就是我想出的:
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
Run Code Online (Sandbox Code Playgroud)
对于渲染语句,它给了我undefined local variable or method 'resource'.谷歌搜索后我发现我应该添加
@user.should_receive(:resource).and_return(User.new)
Run Code Online (Sandbox Code Playgroud)
在渲染语句之前 - 但它仍然给我相同的错误,我不确定如何使用它.
我究竟做错了什么?谢谢你的帮助.