1

github How To: Test (devise) with Rails 3 and RSpec にいくつかのリソースがあります。しかし、ハウツーは非常に高レベルであり、私のコンテキストでは機能させることができません。ログに記録されたユーザー (before_filter :authenticate_user!) を必要とするコントローラーをテストするために、これらすべての部分をまとめて接続または構成する適切な方法は何ですか???

今のところ、単一のコントローラーで rspec を実行しようとしています..

require File.dirname(__FILE__) + '/../spec_helper'
describe ArticlesController do
  fixtures :all
  render_views

  before (:each) do
    @user = Factory.create(:user)
    sign_in @user
  end

  it "index action should render index template" do
    get :index
    response.should render_template(:index)
  end
end

rspecを実行したときの出力は次のとおりです

Failures:
  1) ArticlesController index action should render index template
     Failure/Error: Unable to find matching line from backtrace
     SQLite3::ConstraintException: articles.user_id may not be NULL
4

2 に答える 2

0

フィクスチャを修正したか、工場を次のように言う必要があります。

Factory.define :article do |e|
  e.name "Article001"
  e.user { |u| u.association(:user) }
end

それは私にこの新しいエラーを与えます...

Failures:
  1) ArticlesController index action should render index template
     Failure/Error: response.should render_template(:index)
     expecting <"index"> but rendering with <"devise/mailer/confirmation_instructions">.
     Expected block to return true value.

Article コントローラーの index メソッドが渡されるテストを確認したいだけです。その点、ユーザーの作成には興味がありません。エラーは、ユーザーが作成されたことを示しています。

私はあなたの提案を試みましたが、「スタブ」でやめました

Failure/Error: Asset.stub(:find).and_return([])
     undefined method `stub' for #<Class:0x000000048310b8>

とあなたの方法の間の最良のアプローチは何fixture:allですか?

于 2010-11-02T18:10:40.833 に答える
0

フィクスチャのエラーのようです。エラー メッセージは、user_id なしでは記事を作成できないことを示しています。

フィクスチャを修正するかfixtures :all、find メソッドを削除してスタブ化することでフィクスチャの使用を避けることができます。

before(:each) do
  @user = Factory.create(:user)
  sign_in @user
  Article.stub(:find).and_return([])
end

これはfind、空の配列を返すように指示します。これは、テンプレートで使用するためにコントローラー インデックス アクションが @articles インスタンス変数に割り当てる必要があります。テンプレートをエラーなしでレンダリングするには、これで十分なはずです。

于 2010-11-02T06:34:03.977 に答える