【发布时间】: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