0

ここで何が悪いのか理解できません。クライアントモデルと請求書モデルがあります。

Client.rb

has_many :invoices, dependent: :destroy

Invoices.rb

belongs_to :client

私は次のクライアント仕様を持っています:

it "destroys its children upon destruction" do
  i = FactoryGirl.create(:invoice) # As per the factory, the :client is the parent of :invoice and is automatically created with the :invoice factory

  lambda {
    i.client.destroy
  }.should change(Invoice.all, :count).by(-1)
end

そして、ここに私の工場があります:

クライアントファクトリー

FactoryGirl.define do
  factory :client do
    city "MyString"
  end
end

請求書ファクトリ

FactoryGirl.define do
  factory :invoice do
    association :client
    gross_amount 3.14
  end
end

私がそうしi = FactoryGirl.create(:invoice)、その後i.client.destroyコンソールで手動で行うと、請求書は実際に破棄されます。しかし、何らかの理由でテストが失敗し、「カウントは-1で変更されるべきでしたが、0で変更されました。

私は何が間違っているのですか?

4

1 に答える 1

2

の戻り値Invoice.allは配列であるため、データベース操作はそれに影響しません。レコードを破棄しても配列は変更されず、同じshould change(receiver, message)に送信されるだけです。次のいずれかを試してください。messagereceiver

lambda {
  i.client.destroy
}.should change(Invoice, :count).by(-1)

また

lambda {
  i.client.destroy
}.should change{Invoice.all.count}.by(-1)
于 2013-01-02T21:17:32.877 に答える