3

ネストされたリソースがあります:

resources :portfolios do
  resources :asset_actions
end

RSpec コントローラーに続いて: asset_actions_controller_spec.rb

before(:each) do
  @portfolio = Factory(:portfolio)
end

describe "POST create" do
  describe "with valid params" do
    it "creates a new AssetAction" do
      expect {
        post :create, :asset_action => valid_attributes, :portfolio_id => @portfolio.id
        #@portfolio.asset_actions.create! valid_attributes #WORKS correctly, but this is Model
      }.to change(@portfolio.asset_actions, :count).by(1)
    end
  end
end

Spec の実行中に次のエラーが発生しました。

Failure/Error: expect {
   count should have been changed by 1, but was changed by 0

この失敗の理由がわかりません。助言がありますか?

注: Rails 3.1.3、Ruby 1.9.3p5、RSpec 2.8.0

4

1 に答える 1

0

@portfolio問題は、ローカル変数であるため変更されていないことだと思います。これはメモリに保存され、データベースに変更を加えました。そのため、変更を確認するにはリロードする必要があります@portfolio。次のようなことを試してください:

describe "POST create" do
  describe "with valid params" do
    it "creates a new AssetAction" do
      post :create, :asset_action => valid_attributes, :portfolio_id => @portfolio.id

      expect { @portfolio.reload }.to change(@portfolio.asset_actions, :count).by(1)
    end
  end
end
于 2013-08-15T21:04:45.413 に答える