Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/52.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 使用Factory Girl进行测试时处理数据库的正确方法_Ruby On Rails_Ruby On Rails 3_Testing_Factory Bot_Fixtures - Fatal编程技术网

Ruby on rails 使用Factory Girl进行测试时处理数据库的正确方法

Ruby on rails 使用Factory Girl进行测试时处理数据库的正确方法,ruby-on-rails,ruby-on-rails-3,testing,factory-bot,fixtures,Ruby On Rails,Ruby On Rails 3,Testing,Factory Bot,Fixtures,我正在尝试将一个使用Fixture的Rails 3应用程序转移到Factory Girl,但不完全确定数据库的正确方法。(注意,我使用Rspec进行测试) 我有一个seeds.db,其中包含功能和集成测试所需的数据,但是当涉及到我的角色模型的模型测试时,如果我想从工厂创建一个管理员角色,这个种子数据可能会遇到阻碍,但是我的seed在数据库中已经有一个管理员角色,名称列必须是唯一的。此外,我在这些模型测试中创建的任何数据都可能会干扰我的集成测试,因为我会有我不期望的额外数据 我想有几个问题: 在我

我正在尝试将一个使用Fixture的Rails 3应用程序转移到Factory Girl,但不完全确定数据库的正确方法。(注意,我使用Rspec进行测试)

我有一个
seeds.db
,其中包含功能和集成测试所需的数据,但是当涉及到我的
角色
模型的模型测试时,如果我想从工厂创建一个管理员角色,这个种子数据可能会遇到阻碍,但是我的seed在数据库中已经有一个管理员角色,名称列必须是唯一的。此外,我在这些模型测试中创建的任何数据都可能会干扰我的集成测试,因为我会有我不期望的额外数据

我想有几个问题:

  • 在我的单元测试中,处理数据库的正确方法是什么?我需要其他测试的种子数据,但它们现在似乎“碍事”。我是否被迫使用序列生成唯一的数据,或者是否有方法加载种子数据以进行功能和集成测试等

  • 是否有适当的方法清除工厂数据,使其成为功能和集成测试的种子数据

  • 现在对工厂女孩来说是全新的,我只是想好好学习,而不是一路攻破它。感谢您的输入。

    在测试中处理数据库数据的“正确”方法是在运行每个测试之前确保数据库数据干净一致。很多人(包括我自己)从来没有在数据库中播种,而是使用工厂

    对数据库进行种子设定也会使您更难知道发生了什么,并且会导致您做出假设,而这些假设很多时候都是错误的。相反,使用工厂只添加测试所需的数据。这是一点额外的工作,但它是值得的,因为:

  • 删除您的假设
  • 确保一个干净一致的测试环境
  • 在测试中保留测试的所有数据
  • 另外,rspec在(:each)之前有
    ,在(:all)
    之前有
    ,因此您可以在运行测试之前设置数据。所以这并不是很多额外的工作

    但一开始可能会让您感到困惑的是,当使用
    before(:all)
    时,rspec不会在测试运行之间清除数据库,因为我通常只是在
    after(:all)
    块中手动删除数据库。因此,我使用的经验法则是:在(:all)
    之前的
    中创建的任何内容都应该在(:all)
    之后的
    中删除


    很多人也使用gem,但到目前为止我还不需要它。

    谢谢你的回答!我会尽量只去工厂,但我的项目负责人暗示我们需要种子,尽管他没有具体说明原因,所以希望我能解决这个问题。