2013-10-02 32 views
2

我对TDD非常陌生,并且选择使用上面提到的Gems。我想我已经正确设置了它,因为我可以运行我的测试。但是,我不能弄清楚如何从db/seeds.rb填充我的测试数据库。当我在终端调用使用Minitest-rails,水豚,水豚-webkit和Rails测试数据库播种4

rake db:seed RAILS_ENV=test 

,我可以看到通过pgAdmin的数据库中创建的行。然而,当我跑我的测试与以下

rake minitest:all 

数据库最终成为空白之后,在测试时,我保存的截图,从数据库中的项目并没有因为它的时候出现在前台我在开发。

我的test_helper.rb包含以下内容。

ENV["RAILS_ENV"] = "test" 
require File.expand_path("../../config/environment", __FILE__) 
require "rails/test_help" 
require "minitest/rails" 
require 'minitest/rails/capybara' 
require 'minitest/focus' 
require 'minitest/colorize' 
Capybara.javascript_driver = :webkit 

class ActiveSupport::TestCase 
    fixtures :all 
    DatabaseCleaner.strategy = :transaction 

    class MiniTest::Spec 
     before :each do 
      Rake::Task["db:seed"].invoke 
      DatabaseCleaner.start 
     end 

     after :each do 
      DatabaseCleaner.clean 
     end 
    end 
end 

而对于一些额外的背景下,我国的DB/seeds.rb文件

ProgramIndustry.delete_all 
ProgramIndustry.create([ 
     { name: 'Accounting and finance'}, 
     { name: 'Banking'}, 
     { name: 'Construction'}, 
     { name: 'Education'} 
]) 

为什么数据库不能与seeds.rb填充(从使用人工播种耙时有效)当测试开始?

回答

5

你的数据库是空白的,因为你使用DatabaseCleaner,它从数据库中删除数据。我想这是你希望你的test_helper.rb中的文件是什么样子:

ENV["RAILS_ENV"] = "test" 
require File.expand_path("../../config/environment", __FILE__) 
require "rails/test_help" 
require "minitest/rails" 
require 'minitest/rails/capybara' 
require 'minitest/focus' 
require 'minitest/colorize' 

Capybara.javascript_driver = :webkit 

class ActiveSupport::TestCase 
    fixtures :all 

    DatabaseCleaner.strategy = :transaction 

    before do 
    DatabaseCleaner.start 
    Rake::Task["db:seed"].invoke # seed after starting 
    end 

    after do 
    DatabaseCleaner.clean 
    end 
end 

我不知道关于调用数据库的更多信息:从种子任务前的钩,这似乎有点怀疑。但我不使用DatabaseCleaner,因为我更喜欢使用Fixture和ActiveSupport :: TestCase支持的事务。

我不知道你为什么使用DatabaseCleaner,但是看到你在Minitest中使用RSpec语法时,我假设你只是在尝试一些东西,直到它们工作。我可能会建议下落DatabaseCleaner并把所有的测试数据在装置和使用以下跨线程管理数据库事务:

ENV["RAILS_ENV"] = "test" 
require File.expand_path("../../config/environment", __FILE__) 
require "rails/test_help" 
require "minitest/rails" 
require 'minitest/rails/capybara' 
require 'minitest/focus' 
require 'minitest/colorize' 

class ActiveSupport::TestCase 
    fixtures :all 
end 

# Capybara driver 
Capybara.javascript_driver = :webkit 

# Make all database transactions use the same thread 
ActiveRecord::ConnectionAdapters::ConnectionPool.class_eval do 
    def current_connection_id 
    Thread.main.object_id 
    end 
end 

如果你有问题这一说法,认为这种变化:

ENV["RAILS_ENV"] = "test" 
require File.expand_path("../../config/environment", __FILE__) 
require "rails/test_help" 
require "minitest/rails" 
require 'minitest/rails/capybara' 
require 'minitest/focus' 
require 'minitest/colorize' 

class ActiveSupport::TestCase 
    fixtures :all 
end 

# Capybara driver 
Capybara.javascript_driver = :webkit 

# Make all database transactions use the same thread 
class ActiveRecord::Base 
    mattr_accessor :shared_connection 
    @@shared_connection = nil 

    def self.connection 
    @@shared_connection || retrieve_connection 
    end 
end 

ActiveRecord::Base.shared_connection = ActiveRecord::Base.connection 
+0

呜呼!谢谢你这个作品。是的,我显然不知道我在做什么。 :D –

+0

我有同样的问题,但我没有使用DatabaseCleaner,我们没有使用灯具。我已经尝试了数百万的东西。我正在迅速接近放弃测试分贝的点:P – jaydel

+0

@jaydel联系我,我可能会提供帮助。 – blowmage