モデルを保存し、バックグラウンドジョブを実行するオブジェクトがあります。一連のメッセージが異なるオブジェクト/クラスに送信されることを確認してください
Class UseCase
...
def self.perform
@account.save
BackgroundJob.perform_later(@account.id)
end
end
私の仕様では、両方のメッセージが送信されることを別にテストしたいと思います。
私は
it 'saves the account' do
expect_any_instance_of(Account).to receive(:save)
UseCase.perform(account)
end
のようなものから始めて、私はちょうどperform
にアカウントを保存されたときに、これはうまく働きました。 しかし、私がバックグラウンドジョブを追加したとき、仕様は今や以後渡されませんCouldn't find Account without an ID
。
両方のメッセージが送信されることを(RSped 3.5では)個別に確認する方法はありますか。
UPDATE
it 'runs the job' do
expect(BackgroundJob).to receive(:perform_later).with(instance_of(Fixnum))
UseCase.perform(account)
end
ので、私はアカウントが正しく保存されていると渡します。私は@accountに 'アカウントが保存されます' は、
def self.perform
@account.save
byebug
BackgroundJob.perform_later(@account.id)
end
を検査しようとすると、
は、しかし、私は 'ジョブを実行する' は
(byebug) @account
#<Account id: nil, full_name: "john doe" ...>
を取得し、私は
(byebug) @account
#<Account id: 1, full_name: "john doe" ...>
を取得します
期待通りに@account
がtest doubleになるので、最初の仕様ではジョブはIDを取得できません。
おかげ
'@account.save'が実際に' true'を返すことを確認する仕様がありますか?私は '@accountだと思います。save'はアカウントが無効で、保存されていないので、 'id'が割り当てられていないという意味で' false'を返します。 – spickermann
私はbelive @spickermannが正しいです。私は 'save!'と 'save'の違いを説明する答えを加えました。うまくいけば、これはあなたを助ける –