gpt4 book ai didi

mysql - 我的测试应该为强制关联创建数据库记录吗?

转载 作者:行者123 更新时间:2023-11-30 22:10:08 24 4
gpt4 key购买 nike

这是一个最佳实践类的问题:如果我的 Garden 有一个必填字段 user_id 我的测试是否应该实际创建 User 在数据库中,还是有更好的方法?

我发现在我的 Controller 的更新测试中我遇到了我想重用我的花园工厂的情况,但是花园工厂在数据库中创建了所需的用户并且我在重复时遇到了唯一约束冲突电子邮件。所以现在我要么需要让工厂生成唯一的电子邮件,要么我需要学习如何模拟关联的记录。

我想真正让我感到困惑的是创建/更新花园会检查数据库中是否存在相关记录。我还不明白我怎么能走捷径。而且我也不知道有没有这个必要?如果我将 database_cleaner gem 设置为默认将测试作为数据库事务执行,也许我不必担心有多少 User 记录被“写入”?

最佳答案

我会使用 factory girl为此,这是模拟模型及其关联行为的好方法。有几种不同的方法可以创建已设置关联的工厂。您可以创建将始终创建其关联的工厂。我个人更喜欢单独创建我的工厂的所有实例,因为它给我更多的灵 active ,这并不是说没有好的用例可以不这样做。

#garden factory
FactoryGirl.define do
factory :garden do
#you can choose which attributes to prepopulate for every garden
end
end

#garden factory
FactoryGirl.define do
factory :user do
#you can choose which attributes to prepopulate for every garden
end
end

#in your test
user1 = FactoryGirl.create(:user, name: 'user1', role: 'farmer)
garden1 = FactoryGirl.create(:garden, name: 'garden1', flower_count: 6, user: user1)

现在你的 cn 变得更加复杂,但这是一个简单的例子,你可以去 here更多指点

关于mysql - 我的测试应该为强制关联创建数据库记录吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40340934/

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