0

コントローラーをテストする必要がある rspec テストがあります。

it "renders the #show view" do
  get :show, id: FactoryGirl.create(:quiz)
  @facebook_profile = FactoryGirl.create(:facebook_profile)
  response.should render_template :show
end

facebook_profile オブジェクトには user_q1 列があるため、@facebook_profile.user_q1 は有効な結果を返します。

私のクイズコントローラーでは:

@user_q1 = @facebook_profile.user_q1

これは手動テストでは問題なく動作しますが、rspec では次の結果が得られます。

undefined method `user_q1' for nil:NilClass

問題は、コントローラーの show メソッドの最初の行にあると思われます。

@facebook_profile = FacebookProfile.find_by_facebook_id(session[:facebook_profile_id])

セッション コントローラー (モデルの列ではありませんが) に、facebook_profile_id という変数があります。次に、クイズ コントローラーの上記のコード行でこの変数を呼び出します。facebook_profile_id がわからないため、私の仕様では @facebook_profile を定義できないと思います。どうやら「@facebook_profile = FactoryGirl」(上記のように) を定義するだけでは機能しません。

4

1 に答える 1

1

次のように進めてください。

let(:fb_profile) { FactoryGirl.create(:facebook_profile) }
let(:quiz) { FactoryGirl.create(:quiz) )

it "renders the #show view" do
  FacebookProfile.should_receive(:find_by_facebook_id).and_return fb_profile
  get :show, id: quiz.id
  response.should render_template :show 
end

実際には、db にオブジェクトを作成する必要はありませんが、それは別の議論です。

于 2013-03-17T20:16:16.730 に答える