首页 > 解决方案 > Minitest 和 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

setup 和 teardown 被执行

但是如果我这样写测试

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

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

标签: ruby-on-railsrubyminitest

解决方案


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

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

  after :each do
    DatabaseCleaner.clean
  end
end

或者,如果您使用的是minitest-aroundgem:

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

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

有关更多信息,请参阅数据库清理文档


推荐阅读