Mysql 我的测试应该为下颌骨关联创建db记录吗?

Mysql 我的测试应该为下颌骨关联创建db记录吗?,mysql,ruby-on-rails,performance,unit-testing,mocking,Mysql,Ruby On Rails,Performance,Unit Testing,Mocking,这是一个最佳实践类型的问题:如果我的Garden有一个user\u id的必填字段,我的测试应该在数据库中实际创建用户,还是有更好的方法 我发现在我的控制器的更新测试中,我遇到了想重用花园工厂的情况,但是花园工厂在数据库中创建了所需的用户,并且我在重复的电子邮件上遇到了独特的约束冲突。因此,现在我要么需要让工厂生成独特的电子邮件,要么需要学习如何模拟相关记录 我想真正让我感到困惑的是,创建/更新花园会检查数据库中是否存在相关记录。我还不明白我怎么能这么做。我也不知道这是否必要?如果我将数据库设置

这是一个最佳实践类型的问题:如果我的
Garden
有一个
user\u id
的必填字段,我的测试应该在数据库中实际创建
用户
,还是有更好的方法

我发现在我的控制器的更新测试中,我遇到了想重用花园工厂的情况,但是花园工厂在数据库中创建了所需的用户,并且我在重复的电子邮件上遇到了独特的约束冲突。因此,现在我要么需要让工厂生成独特的电子邮件,要么需要学习如何模拟相关记录

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

我会使用它来模拟模型及其关联的行为。有几种不同的方法可以创建具有关联的工厂。您可以创建始终创建关联的工厂。我个人更喜欢单独创建我的工厂的所有实例,因为它给了我更多的灵活性,这并不是说没有好的用例来做它

#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)
现在你可能会变得更复杂,但这是一个简单的exmaple,你可以使用更多的指针

我会用它来模拟模型及其关联的行为。有几种不同的方法可以创建具有关联的工厂。您可以创建始终创建关联的工厂。我个人更喜欢单独创建我的工厂的所有实例,因为它给了我更多的灵活性,这并不是说没有好的用例来做它

#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)

现在您可能会变得更复杂,但这是一个简单的exmaple,您可以使用更多指针

如果您担心手动生成唯一记录,最好将关联显示在db中(至少是父关联),请尝试将关联显示在db中(至少家长关联)如果您担心手动生成唯一记录,请尝试
FactoryGirl