这是我的第一次观看测试。 不确定我是否理解整个模拟/存根/双打概念,所以可能存在问题。
我正在测试简单的登录/注册|用户名/退出链接。
application.html.erb:
...
<ul>
<% if user_signed_in? %>
<li>
<%= link_to('Logout', destroy_user_session_path, :method => :delete) %>
<%= current_user.username %>
</li>
<% else %>
<li>
<%= link_to('Login', new_user_session_path) %>
<%= link_to('Sign up', new_user_registration_path) %>
</li>
</ul>
<% end %>
...
application.hmtl.erb_spec.rb:
require 'spec_helper'
describe "layouts/application.html.erb" do
context "when user is signed in" do
before :each do
view.stub(:user_signed_in?) { true }
current_user = double()
current_user.stub(:username) { "Joe" }
render
end
it "displays logout link" do
expect(rendered).to have_link 'Logout'
end
it "displays username" do
expect(rendered).to have_content 'Joe'
end
...
end
end
我收到错误:
Failure/Error: render
ActionView::Template::Error:
undefined method 'authenticate' for nil:NilClass
符合<%= current_user.username %>
所以看起来这个用户名存根不起作用,不知道这里有什么问题吗?
答案 0 :(得分:6)
我解决了这个问题:
view.stub(:user_signed_in?) { true }
view.stub(:current_user) { FactoryGirl.build(:user, username: "Joe") }