gpt4 book ai didi

ruby-on-rails - 如何测试某个函数是否使用 Rails 和 rspec 2 中的事务

转载 作者:数据小太阳 更新时间:2023-10-29 06:26:53 26 4
gpt4 key购买 nike

我有一个模型函数,我想确保它使用事务。例如:

class Model 
def method
Model.transaction do
# do stuff
end
end
end

我目前的方法是在 block 内存入一个方法调用以引发 ActiveRecord::Rollback 异常,然后检查数据库是否真的发生了变化。但这意味着如果由于某种原因 block 内的实现发生变化,那么测试就会中断。

你会如何测试这个?

最佳答案

你应该换个角度看问题。 从行为的角度来看,测试函数是否使用事务是没有用的。它不会为您提供有关函数是否按预期运行的任何信息。

您应该测试的是行为,即预期结果是否正确。为清楚起见,假设您在函数内执行操作 A 和操作 B(在一个事务内执行)。操作 A 在您的应用中向用户记入 100 美元。操作 B 从用户信用卡中扣除 100 美元。

您现在应该为测试提供无效的输入信息,以便从用户的信用卡中扣款失败。将整个函数调用包装在 expect { ... }.not_to change(User, :balance) 中。

通过这种方式,您可以测试预期的行为 - 如果信用卡借记失败,则不要将金额记入用户。此外,如果您只是重构您的代码(例如,您停止使用事务并手动回滚),那么您的测试用例的结果应该不会受到影响。

话虽如此,您仍然应该像@luacassus 提到的那样单独测试这两个操作。此外,如 @rb512 所述,如果您对源代码进行“不兼容”更改(即更改行为),那么您的测试用例应该失败是完全正确的。

关于ruby-on-rails - 如何测试某个函数是否使用 Rails 和 rspec 2 中的事务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10511236/

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