2

我有一些思考狮身人面像测试,我需要关闭事务以防止 mysql 锁定,但这样做我破坏了以前编写的许多其他测试,所以我需要能够切换设置。

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

我已经尝试过self.use_transactional_fixtures = false允许 sphinx 测试通过但会导致其他测试失败的方法。我确信我可以在所有其他测试中将其设置为 true,但这也需要所有其他测试也包含代码片段,这很混乱。

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

提前感谢您的帮助。

4

2 回答 2

4

对于您拥有的 sphinx 相关测试,您应该能够将 use_transactional_fixtures 设置为 false ,但对于您拥有的其他测试,将其设置为 true。关键是将您的测试拆分为单独的测试类。所以在 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 方法。

于 2010-10-29T22:41:53.250 回答
2

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

class MyTest < ActiveSupport::TestCase

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

end
于 2016-02-13T10:20:48.690 回答