我的套件中有一些测试,绝对需要一个空的数据库才能运行。
事实上,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
然后在需要空数据库(没有灯具)的TestCase中,我添加
include DisableFixturesHelper
这样做的问题是,每次测试都会丢弃数据库,在已经加载灯具之后,所以它真的很慢。它确实在每个单元测试开始之前重新加载灯具,只是为了放弃它们。
仍然有效。
答案 0 :(得分:0)
也许它可以提供帮助,你也可以定义什么不删除
类似的东西:
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