Rails 'assert_difference игнорирует некоторые изменения? - PullRequest
3 голосов
/ 01 февраля 2011

У меня есть тест, в котором я выполняю платеж пользователю, у которого есть одна учетная запись.Счет содержит остаток и содержит много транзакций.

По завершении платежа создается транзакция и обновляется баланс на счете.

Использование 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

Это сообщение об ошибке из утверждения:

"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

1 Ответ

6 голосов
/ 01 февраля 2011

Попробуйте перезагрузить запись

assert_difference("a_user.account.reload.balance", 250.00) do
  # Process payment
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...