7

ユーザーのバッチモデルがbelongs_toあります。ユーザーには、自分のバッチ インスタンスのみが表示されます。

indexアクションのために、これが私がしたことです:

Batch#index

context "GET index" do

  it "should get only users batches" do
    FactoryGirl.create(:batch)
    batch = FactoryGirl.create(:batch)
    batch2 = FactoryGirl.create(:batch)            
    subject.current_user.batches << batch
    get "index"
    assigns(:batches).should == subject.current_user.batches
    assigns(:batches).should_not include(batch2) 
  end

end

createアクションのために、これが私がしたことです:

Batch#create

context "POST create" do

  it "should save a users batch into current_user" do
    batch = subject.current_user.batches.build(name: 'bla')
    put :create, batch
    subject.current_user.batches.should include(batch)
  end

  it "should save a batch from other user into current_user" do
    batch = subject.current_user.batches.build(name: 'bla')
    batch2 = FactoryGirl.create(:batch)
    put :create, batch
    subject.current_user.batches.should_not include(batch2)
  end

end

ただし、アクションでこの動作をテストする方法がわかりませんshow。これが私がやっていることです:

Batch#show

context "GET show/:id" do

  it "should show batches from user" do
    batch_params = FactoryGirl.build(:batch)
    batch = subject.current_user.batches.create(batch_params)
    get :show, id: batch.id
    response.should redirect_to(batch)
  end

  it "should not show batches from other users" do
    batch = subject.current_user.batches.create(name: 'bla')
    batch2 = FactoryGirl.create(:batch)
    get :show, id: batch2.id
    response.should redirect_to(:batches)
  end

end

次のエラーが発生しています。

Failures:

  1) BatchesController GET show/:id should not show batches from other users
     Failure/Error: response.should redirect_to(:batches)
       Expected response to be a <:redirect>, but was <200>
     # ./spec/controllers/batches_controller_spec.rb:66:in `block (3 levels) in <top (required)>'

  2) BatchesController GET show/:id should show batches from user
     Failure/Error: batch = subject.current_user.batches.create(batch_params)
     NoMethodError:
       undefined method `stringify_keys' for #<Batch:0x00000005d0ef80>
     # ./spec/controllers/batches_controller_spec.rb:58:in `block (3 levels) in <top (required)>'

私は何を間違っていますか?この動作の動作をどのようにテストすればよいviewですか?

4

2 に答える 2

6
get :show, id: batch.id

リダイレクトせず、ショーをレンダリングするため、応答コード 200 を確認できる可能性があります

response.should render_template :show 
于 2013-03-15T13:19:10.143 に答える
3

最初のエラー「should not show batches from other users」は、コントローラーの実際の問題を反映しているように見えます。問題が実際のコードではなくテストにあることを確認するために、ブラウザでもこれをテストしましたか?

他のテストでは、問題が正確に何であるかはよくわかりませんが、おそらく次のようにバッチをビルドします。

batch = FactoryGirl.create(:batch, user: subject.current_user)

試してみて、解決しないかどうかを確認してください。

于 2013-03-15T13:35:44.463 に答える