ruby-on-rails - 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
不执行设置和拆卸。为什么?我可以修复它吗?
解决方案
尝试将以下内容添加到您的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
类而不是ActiveSupport::TestCase
.
有关更多信息,请参阅数据库清理文档。
推荐阅读
- javascript - “setProps()”没有在 Jest 中触发“useEffect”
- python - python tarfile 中 tar --strip 的等效功能,用于随机命名的子文件夹
- angular - 来自firestore的ngFor循环中的DomSanitizer
- swagger - 在 Open API Doc 中包含多个文件路径
- react-native - 按下通知时 React Native 应用程序不导航
- python - 如何从字符串中删除我想要的所有内容?
- python - 如何在不关闭应用程序的情况下停止功能?
- javascript - 如何在 Vue.js 应用程序中获取 Fullcalendar 的视图对象
- css - 如何使背景图像适合父元素?
- javascript - UnhandledPromiseRejection 未定义问题