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)>'

Web にはこのエラーに関する参照がたくさんありますが、テストに合格できるほど十分に説明的な回答をまだ見つけていません。この問題は、主要な Devise インフラストラクチャが利用できないビュー (モデル/コントローラーから分離してテストされている) に関係していると思います。あなたの提案は大歓迎です。

また、テストに合格したら、他のパス (ユーザーが既にサインインしている) をテストするにはどうすればよいですか? とても似ていると思います。ありがとう。

4

2 に答える 2

42

受信しているエラーは、devise テスト ヘルパーを含める必要があるためです。

一般的に、これを 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を見てください。これにより、テスト、UI などのオプションを使用して新しい Rails プロジェクトを作成することができます。

サンプル プロジェクトを作成します。すばらしいことに、devise を使用したビュー テストを含むすべてのテストが作成されます。次に、これらのテスト仕様からアイデアを得ることができます。

私のために働いた:D

HTH

于 2012-10-22T05:40:58.100 に答える