ruby-on-rails-3 - Rails数据库测试和清除

标签 ruby-on-rails-3 unit-testing model

让我们想象一下:

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的数据库将被清除,还是包含第一个测试用例添加的对象?
可以控制/自定义此行为吗?

最佳答案

不能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

请注意,如果您使用这种方法,请确保在使用事务清除策略的情况下,在默认config.use_transactional_fixtures中删除了spec_helper.rb行-将其设置为true会导致事务出错(至少对于sqlite数据库而言)。

关于ruby-on-rails-3 - Rails数据库测试和清除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7503592/

相关文章:

java - 如何使用 Jersey 2 测试框架为此类编写单元测试

ruby-on-rails - 我应该将我的数据库查询测试放在 Rails 中的什么位置?

java - 使用模型来表示 View 的整体状态

ruby-on-rails - 如何解决 "Can' t mass-assign protected attributes : translations_attributes"error?

json - Rails JSON 请求未正确解析为 post 参数

java - 用于查找数组中最大数量的参数化 Junit 测试用例的预期值

c# - 为更新功能设置模拟(CRUD)

ruby-on-rails - 如何从同一操作将不同链接上的不同数据传递到同一 View ?

javascript - 如何找到特定 tr 中 td 的值

c++ - setData() 和 insert Rows() Qt 模型 View