【问题标题】:Not using fixtures for specific unit tests under Rails 4.2在 Rails 4.2 下不使用固定装置进行特定的单元测试
【发布时间】:2015-04-18 21:09:28
【问题描述】:

我的套件中有一些测试绝对需要一个空数据库才能运行。

问题是,rails 会自动为每个测试加载固定装置,我似乎找不到不为这个特定测试加载它的方法。

我可以在每次测试之前删除数据库,但这很慢,并且需要所有其他需要固定装置的测试在之后重新加载固定装置。

有没有办法让某个测试类(即“NoFixturesTest”)不加载(或卸载)夹具,而不会破坏所有其他测试?

谢谢!

编辑:

感谢下面的回答,我做到了:

module DisableFixturesHelper
    def self.included(base)
        base.setup :setup_drop_db

        # Have a unit test double-check that the fixtures are really gone
        base.test "0 fixtures not loaded" do
            assert_equal 0, Table1.count, "Table1 isn't empty!"
            #etc
        end
    end

    # Call to reset the db and therefore disable fixtures during a single unit test
    def setup_drop_db
        Rails.logger.info { "Dropping database." }
        DatabaseCleaner.clean_with :truncation
    end
end

然后在需要空数据库(无固定装置)的测试用例中,我添加

include DisableFixturesHelper

这样做的问题是每次测试都会删除一次数据库,在夹具已经加载之后,所以它真的很慢。它实际上是在每个单元测试开始之前重新加载固定装置,只是为了删除它们。

仍然有效。

【问题讨论】:

    标签: ruby-on-rails unit-testing ruby-on-rails-4


    【解决方案1】:

    你知道DatabaseCleaner???

    或许有帮助,你也可以定义什么不删除

    类似:

    DatabaseCleaner.strategy = :truncation, {:except => %w[widgets]}
    

    这是一个我经常使用的初始化器:

    RSpec.configure do |config|
      config.before(:suite) do
        DatabaseCleaner.clean_with(:truncation)
      end
    
      config.before(:each) do
        DatabaseCleaner.strategy = :transaction
      end
    
      config.before(:each, :js => true) do
        DatabaseCleaner.strategy = :truncation
      end
    
      config.before(:each) do
        DatabaseCleaner.start
      end
    
      config.append_after(:each) do
        DatabaseCleaner.clean
      end
    end
    

    【讨论】:

    • 我认为这会将数据库重置为固定装置?还是我错了?文档从未提及其他内容。
    • 刚刚测试过,它可以工作,但它仍在加载夹具,只是在测试运行之前将它们丢弃......真的没有其他办法了吗?
    • 老实说,我从不使用 Fixtures,我使用的是 Factory,默认情况下不加载它们,不确定 Fixtures 是如何工作的,顺便说一句,我刚刚用一个我总是与 DatabaseCleaner 一起使用的 n 初始化程序更新了我的答案
    猜你喜欢
    • 1970-01-01
    • 2018-04-08
    • 1970-01-01
    • 1970-01-01
    • 2011-01-29
    • 1970-01-01
    • 1970-01-01
    • 2011-06-02
    • 1970-01-01
    相关资源
    最近更新 更多