【问题标题】:How to prevent "rake test" from deleting "rake db:seed" data?如何防止“rake test”删除“rake db:seed”数据?
【发布时间】:2013-02-13 23:18:52
【问题描述】:

我的 Ruby 版本是 ruby​​ 1.9.3p385 。我的 Rails 版本是 3.2.12。

我使用以下加载测试数据库:

rake db:seed RAILS_ENV=test

一切都很好。所有工厂女孩的东西都装得很好。

test/factories.rb 的内容包含工厂。 db/seeds.rb 的内容很简单:

FactoryGirl.create(:music_categorization)
FactoryGirl.create(:dance_categorization)

现在,当我使用以下命令运行测试时:

rake test

Rails 删除所有种子数据并且测试失败。我想要一种方法来防止“rake test”删除数据。

我走的另一条路是加载种子数据作为“rake test”命令的一部分,正如question 中提到的那样。但是,最终会加载两次测试数据(基本上 db/seeds.rb 出于某种原因被调用了两次)。我放弃了这条路线,现在只想执行以下操作来运行我的测试:

rake db:seed RAILS_ENV=test
rake test

感谢任何帮助。我基本上是想防止 rake test 删除我的数据,或者想办法不让 db/seeds.rb 被调用两次。

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.2 rake-test


    【解决方案1】:

    AFAIK 通常不使用db:seed 为您的测试加载数据,它通常仅用于加载种子数据以用于开发目的。

    您应该在实际的测试文件中创建测试数据。通常使用database_cleaner之类的东西在每次测试后删除测试数据,因此每次测试都从一个空数据库开始。

    例如,在 rspec 中,您可以在 let 块、before 块或测试本身中加载测试数据,例如

    require 'spec_helper'
    
    describe Page do
      let(:user) { FactoryGirl.create(:user) }
    
       before do
         # create some data
       end
    
      it '#name returns XYZ' do
        page = FactoryGirl.create(:page, :user => user)
        page.description.should == 'XYZ'
      end
    
      it '#description returns ABC' do
        page = FactoryGirl.create(:page, :user => user)
        page.description.should == 'ABC'
      end
    end
    

    【讨论】:

    • 感谢您提供的详细信息。我已经接受了这个作为解决方案。您和@boulder 都指出了相同的概念,我已经为您提供了解决方案,因为您还向我指出了 database_cleaner,并给出了 rspec 的完整示例。谢谢!
    【解决方案2】:

    首先,我只想说,一般来说,您不应该在测试中使用种子数据。测试应该使用空数据库运行,并且您只创建每个测试所需的数据。

    在您的情况下,您似乎没有理解种子数据的含义,这基本上是您的应用程序正常工作所需的核心数据。如果您需要在测试中实例化几个模型,只需执行(假设您使用的是 rspec)

        before(:each) do
          FactoryGirl.create(:music_categorization)
          FactoryGirl.create(:dance_categorization)
        end
    

    如果您仍想使用种子数据运行测试,您可以随时尝试运行rspec,它只会运行您所有的 rspec 示例,而测试数据库保持原样。但请相信,这不是你想要的。

    【讨论】:

    • 感谢 cmets。非常有帮助,我已经听取了您为每个测试初始化​​事物的建议。我已经放弃了将 rake db:seed 与测试结合使用的想法。
    猜你喜欢
    • 2017-10-18
    • 1970-01-01
    • 2015-07-13
    • 2023-04-09
    • 2014-11-07
    • 1970-01-01
    • 2015-07-11
    • 2015-10-12
    • 2014-10-09
    相关资源
    最近更新 更多