【问题标题】:Views testing and Devise's current_user查看 testing 和 Devise 的 current_user
【发布时间】:2013-10-28 17:21:23
【问题描述】:

这是我的第一次浏览量测试。 不确定我是否理解整个模拟/存根/双打概念,所以可能存在问题。

我正在测试简单的登录/注册 |用户名/注销链接。

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

符合&lt;%= current_user.username %&gt;

所以看起来这个用户名存根不起作用,知道这里有什么问题吗?

【问题讨论】:

  • 是的,但它不起作用。他们在文档中写道:这些助手不适用于由 Capybara 或 Webrat 驱动的集成测试。它们仅用于功能测试。相反,填写表格或明确设置用户在会话中;

标签: ruby-on-rails rspec devise ruby-on-rails-4


【解决方案1】:

我解决了这个问题:

  view.stub(:user_signed_in?) { true }
  view.stub(:current_user) { FactoryGirl.build(:user, username: "Joe") } 

【讨论】:

  • 对新的 Rspec 2.14+ & 3 语法的更新:allow(view).to receive(:user_signed_in?) { true }allow(view).to receive(:current_user) { FactoryGirl.build(:user, username 'Joe') }
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-22
  • 1970-01-01
  • 1970-01-01
  • 2023-04-03
  • 1970-01-01
相关资源
最近更新 更多