1つのアカウントを持つユーザーに支払いを完了させるテストがあります。口座には残高があり、多くの取引があります。Railsのassert_differenceはいくつかの変更を無視しますか?
お支払いが完了すると、トランザクションが作成され、アカウントの残高が更新されます。
トランザクションの数を確認するためにassert_differenceを使用すると、予想される結果が得られます。しかし、残高が変更されたことを確認するためにassert_differenceを使用することはできません。私は私のログのバランスを更新するSQLを見ることができますが、アサーションはそれが変更されていないと思っています。
私は完全に混乱しています、誰でも説明できますか?
ありがとうございます。
これは渡し:
assert_difference("a_user.account.transactions.count", 1) do
# Process payment
end
これが失敗し、変化がないと言って:
assert_difference("a_user.account.balance", 250.00) do
# Process payment
end
これは、アサーションから障害messgeです:
"a_user.account.balance" didn't change by 250.0.
<300.0> expected but was
<50.0>.
これが関連していますログファイルからのSQL:
User Load (0.4ms) SELECT * FROM `users` WHERE (`users`.`id` = 108093344)
Account Load (0.2ms) SELECT * FROM `accounts` WHERE (`accounts`.user_id = 108093344) LIMIT 1
Transaction Columns (1.5ms) SHOW FIELDS FROM `transactions`
Transaction Create (0.3ms) INSERT INTO `transactions` (`created_at`, `updated_at`, `amount`, `account_id`, `detail`) VALUES('2011-02-01 17:15:21', '2011-02-01 17:15:21', 250.0, 956948796, 'Payment completed')
Account Load (0.2ms) SELECT * FROM `accounts` WHERE (`accounts`.`id` = 956948796)
Account Update (0.2ms) UPDATE `accounts` SET `updated_at` = '2011-02-01 17:15:21', `balance` = 300.0 WHERE `id` = 956948796
をリロードしてください。私がassert_differenceを取り除いて支払いを処理する前後に残高を出力すると、50.0の出力が2回取得されます。ただし、支払いを処理した後に残高のみを出力すると、予想される300.0が得られます。 – Peter