하나의 계정을 가진 사용자에게 지불을 완료하는 테스트가 있습니다. 계정에 잔액이 포함되어 있으며 많은 거래가 있습니다.레일즈의 assert_difference가 일부 변경 사항을 무시합니까?
지불 완료시 트랜잭션이 생성되고 계정 잔액이 갱신됩니다.
변경 내용을 확인하기 위해 assert_difference를 사용하면 예상 한 결과가 나타납니다. 그러나 assert_difference를 사용하여 잔액이 변경되었는지 확인하지 않습니다. 내 로그에서 균형을 업데이트하는 SQL을 볼 수 있지만 변경되지 않았다고 주장합니다.
나는 완전히 혼란 스럽다. 누구든지 설명해 주실 수 있습니까?
미리 감사드립니다.
이 통과 :
"a_user.account.balance" didn't change by 250.0.
<300.0> expected but was
<50.0>.
이는 관련 :
assert_difference("a_user.account.balance", 250.00) do
# Process payment
end
이 주장에서 실패 messge은 다음과 같습니다 변화가없는 말이 실패
assert_difference("a_user.account.transactions.count", 1) do
# Process payment
end
, 로그 파일의 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 출력을 두 번 받게됩니다. 그러나 지불을 처리 한 후에 잔액 만 출력하면 예상 된 300.0이됩니다. – Peter