13

我正在将我的应用程序升级到 Rails 3。我开始将 Rspec 2 与 Rails 3 一起使用。我需要关闭一些 rspec 测试的事务性固定装置。之前我在我的模型规格中使用了以下代码

 before(:all) do
    ActiveSupport::TestCase.use_transactional_fixtures = false
  end

  after(:all) do
    ActiveSupport::TestCase.use_transactional_fixtures = true
    clean_engine_database
  end

这现在给了我错误:

 Failure/Error: ActiveSupport::TestCase.use_transactional_fixtures = false
     undefined method `use_transactional_fixtures=' for ActiveSupport::TestCase:Class

有没有办法在带有 Rspec 2 的 Rails 3 中为每个测试块执行此操作?

4

3 回答 3

23

我正在寻找这个问题的答案,遇到了这个博客条目

它建议在描述块内声明

describe "xxx" do
  self.use_transactional_fixtures = false
  ...

我在带有 RSpec 2.6.3 的 Rails 3.0.7 上进行了尝试,看起来可以正常工作。

于 2011-06-01T00:22:28.963 回答
0

config.use_transactional_fixtures = false您可以通过添加 spec_helper.rb 来全局禁用事务性固定装置。如果您想通过测试来控制它们(例如,仅在其中一些上使用事务性),您可以使用 DatabaseCleaner 设置此行为。

在浏览器上使用 javascript 测试页面时,我遇到了一个相关问题(这种情况不适用于事务性装置)。这是我设法解决它的方法:http: //github.com/lailsonbm/contact_manager_app

于 2010-10-13T00:28:08.133 回答
0
RSpec.configure do |config|
  config.use_transactional_fixtures = true
end
于 2010-10-13T00:40:17.257 回答