Тестирование контроллера вложенных ресурсов с RSpec - количество не меняется на 1 - PullRequest
3 голосов
/ 25 декабря 2011

у меня есть вложенные ресурсы:

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

1 Ответ

0 голосов
/ 16 августа 2013

Я думаю, проблема в том, что @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
...