测试使用Devise和RSpec的视图

时间:2012-10-22 05:32:01

标签: ruby-on-rails rspec devise

我试图在将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基础设施可用。您的建议表示赞赏。

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

2 个答案:

答案 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