gpt4 book ai didi

ruby-on-rails - Rails 的 assert_difference 是否忽略了一些变化?

转载 作者:行者123 更新时间:2023-12-03 12:19:46 24 4
gpt4 key购买 nike

我有一个测试,我在其中完成了对拥有一个帐户的用户的付款。该帐户包含余额并有许多交易。

付款完成后,将创建交易并更新帐户余额。

使用 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

最佳答案

尝试重新加载记录

assert_difference("a_user.account.reload.balance", 250.00) do
# Process payment
end

关于ruby-on-rails - Rails 的 assert_difference 是否忽略了一些变化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4865861/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com