Minitest 和 setup/teardown 钩子

Minitest and setup/teardown hooks

我在test_helper

中有如下代码
require "minitest/spec"
require "minitest/autorun"
require "database_cleaner"

class ActiveSupport::TestCase
  DatabaseCleaner.strategy = :deletion

  include Minitest::Spec::DSL

  setup { DatabaseCleaner.start }
  teardown { DatabaseCleaner.clean }
end

如果我写这样的测试

class MyTest < ActiveSupport::TestCase
  test 'test' do
    #some code
  end
end

设置和拆卸已执行

但是如果我这样写测试

class MyTest < ActiveSupport::TestCase
  describe 'some test'
    before do
       @user = FactoryBot.create(:user)
    end

    it 'first test' do
      # some code
    end

    it 'second test' do
      # some code
    end
  end
end

不执行设置和拆卸。为什么?我可以修复它吗?

尝试将以下内容添加到您的 test_helper.rb

class Minitest::Spec
  before :each do
    DatabaseCleaner.start
  end

  after :each do
    DatabaseCleaner.clean
  end
end

或者,如果您使用 minitest-around gem:

class Minitest::Spec
  around do |tests|
    DatabaseCleaner.cleaning(&tests)
  end
end

这里重要的是使用 Minitest::Spec class 而不是 ActiveSupport::TestCase.

有关详细信息,请参阅 database cleaner docs