23

user_signed_in?在将 Devise 的方法添加到有问题的视图模板后,我试图让之前通过的 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)>'

网络上有很多关于这个错误的引用,但我还没有找到一个足够描述性的答案,我可以让我的测试再次通过。我相信这个问题与没有一些关键的设计基础设施可用的视图(正在与任何模型/控制器隔离测试)有关。感谢您的建议。

另外,一旦测试通过,我将如何测试其他路径(用户已经登录)?我想它会非常相似。谢谢。

4

2 回答 2

42

您收到的错误是因为您需要包含设计测试助手

通常你会添加这个(你可能已经有)到 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
于 2012-10-22T15:12:19.790 回答
1

看看 Rails Composer,它将指导您创建一个新的 Rails 项目,其中包含测试、UI 等选项。

创建一个示例项目,很酷的是它会为您创建所有测试,包括使用设计查看测试。然后你可以从那些测试规范中得到一个想法。

为我工作:D

高温高压

于 2012-10-22T05:40:58.100 回答