Rails数据库测试和清理

发布于 2024-12-05 22:48:34 字数 361 浏览 0 评论 0原文

让我们想象一下:

class ModTest < ActiveSupport::TestCase
   test "something" do
     m1 = Mod.new
     # test some things
     assert m1.save
   end

   test "whatever" do
     m2 = Mod.new
     # test other things
     assert m2.save
   end
end

在执行第二个测试用例(即 whatever)之前,数据库会被清除,还是会包含第一个测试用例添加的对象? 这种行为可以控制/定制吗?

Let's imagine this:

class ModTest < ActiveSupport::TestCase
   test "something" do
     m1 = Mod.new
     # test some things
     assert m1.save
   end

   test "whatever" do
     m2 = Mod.new
     # test other things
     assert m2.save
   end
end

Before the 2nd test case gets executed, the one called whatever, will the database be cleared, or will it contain the object added by the first test case?
Can this behaviour be controlled/customised?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

驱逐舰岛风号 2024-12-12 22:48:34

不能 100% 确定默认行为是什么,我一直在使用 database_cleaner gem 来实现此目的。以下是我的 spec_helper.rb 中的相关代码:

require 'database_cleaner'

RSpec.configure do |config|

  # Truncated for brevity

  config.before :suite do
    DatabaseCleaner.strategy = :transaction
    DatabaseCleaner.clean_with :truncation
  end

  config.before :each do
    DatabaseCleaner.start
  end

  config.after :each do
    DatabaseCleaner.clean
  end
end

需要注意的是,如果您选择此路线,请确保取出默认 spec_helper 中的 config.use_transactional_fixtures 行.rb 如果您使用事务清理策略 - 将其设置为 true 会导致事务内事务错误(至少对于 sqlite 数据库而言)。

Not 100% sure on what the default behavior is, I've been using the database_cleaner gem for this purpose. Below is the relevant code in my spec_helper.rb:

require 'database_cleaner'

RSpec.configure do |config|

  # Truncated for brevity

  config.before :suite do
    DatabaseCleaner.strategy = :transaction
    DatabaseCleaner.clean_with :truncation
  end

  config.before :each do
    DatabaseCleaner.start
  end

  config.after :each do
    DatabaseCleaner.clean
  end
end

One caveat, if you go this route make sure you take out the config.use_transactional_fixtures line in the default spec_helper.rb if you use the transaction cleaning strategy - leaving it set to true causes transaction within transaction errors (at least for sqlite databases).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文