2010-10-29 72 views
0

我有一些思维狮身人面像测试,我需要关闭交易,以防止MySQL锁,但在这样做,我打破了以前写很多其他测试,所以我需要能够切换设置。如何使用Test :: Unit为一组测试切换使用transactional_fixtures?

我发现了关于rspec的类似问题,但对于Test :: Unit没有。

我试过self.use_transactional_fixtures = false这是什么让狮身人面像测试通过,但导致其他人打破。我确信我可以在所有其他测试中将其设置为true,但是这也会要求所有其他测试都包含代码段,这也很麻烦。

我也试过uses_transaction :test_method_name,但是它的工作方式与前面提到的方法相同。

在此先感谢您的帮助。

回答

4

您应该能够将use_transactional_fixtures设置为false,对于只是您拥有的狮身人面像相关测试,但在其他测试中保持不变。关键是将你的测试分成不同的测试类。因此,在test_helper.rb中你仍然有:

self.use_transactional_fixtures = true 

但随后你的其他测试,你会做这样的事情

class PostTest < ActiveSupport::TestCase 
    # your normal post tests that require transactional fixtures 
end 

class SphinxRelatedPostTest < ActiveSupport::TestCase 
    self.use_transactional_fixtures = false 
    # your other tests 
end 

这应该意味着你的定期测试运行使用快速交易灯具,但rails会根据需要使用DELETE/INSERT方法。

+0

这就是我设置事物的方式,但是你说的是我在别处寻找问题的同样的东西。事实证明,delayed_jobs表中有几条记录不断将计数对比搞砸。谢谢您的帮助。 – chris 2010-10-30 04:49:47

0

您还可以使用uses_transaction为特定方法/测试禁用它们。

class MyTest < ActiveSupport::TestCase 

    uses_transaction :test_something 
    test "something" do 
    "test something like callback" 
    end 

end 
相关问题