如果我运行它们单独使用我的MINITEST控制器测试,工作正常rake minitest:controllers
但是当我运行rake minitest:all
然后我得到验证失败错误。 这是因为电子邮件是在模型试验已被使用。 我用DatabaseCleaner清理数据库,但无法清除数据库。
我对数据库清理代码:
require "database_cleaner"
DatabaseCleaner.strategy = :transaction
class MiniTest::Rails::ActionController::TestCase
include Devise::TestHelpers
def setup
DatabaseCleaner.start
end
def teardown
DatabaseCleaner.clean
end
简短的回答:
gem install "minitest-around"
长一点的回答:
前/或安装/拆卸后MINITEST 不挂钩,如RSpec的,所以你不能在MINITEST多前/后或安装/拆卸,因为他们做什么,只是重新定义方法。
为了解决这个问题,你可以使用minitest-around
,增加了支持多before
/ after
或setup
/ teardown
和around
,只需将宝石添加到您的测试组:
# put in your Gemfile
gem 'minitest-around', group: :test
有关设置database_cleaner,你可以拥有它,只要你想,下面是设置的例子:
# tests/support/database_cleaner.rb
DatabaseCleaner.strategy = :transaction
DatabaseCleaner.clean_with(:truncation)
class Minitest::Rails::ActionController::TestCase
def setup
DatabaseCleaner.start
end
def teardown
DatabaseCleaner.clean
end
end
并在测试文件:
# tests/your/test/file_test.rb
require 'support/database_cleaner'
# assertions here ...
就是这样,看到Github上的详细信息。
我发现我的错误,可能是它可以帮助别人..
我应该写DatabaseCleaner.start在设置定义每一个模型试验的设置,因为我在每一个测试文件覆盖安装方法。
如果出于某种原因你不想加入“MINITEST全能”宝石(有超过一个的安装和拆卸方法),你可以在你做到这一点test_helper.rb
...
require "database_cleaner"
DatabaseCleaner.strategy = :transaction
module AroundEachTest
def before_setup
super
DatabaseCleaner.start
end
def after_teardown
super
DatabaseCleaner.clean
end
end
class Minitest::Test
include AroundEachTest
end
这就是为什么我喜欢MINITEST; 没有花哨的DSL阻止思考如何正确使用Ruby。
我的设置如下:
在test_helper.rb
class MyTest < Minitest::Test
def setup
DatabaseCleaner.start
end
def teardown
DatabaseCleaner.clean
end
end
然后,我只是在需要清理数据库的任何测试继承这一点。 注意调用super
第一清除任何特定的子类,设置之前的分贝。 同一呼叫的super
将需要包括在任何子类teardown
方法,但通常可以完全省略。
class FooTest < MyTest
def setup
super
@foo = Foo.new(bar: 'whatever')
end
def test_save
@foo.save
assert_equal 1, Foo.count
end
end
如果我需要继承MyTest
进一步(例如,用于集成测试),我有自己的setup
和teardown
与调用方法super
所以它就会从继承树。
你可以干起来这个是重复
DatabaseCleaner.strategy = :truncation
class MiniTest::Spec
before :each do
DatabaseCleaner.clean
end
end
这个例子子类规范亚军,但你可以选择您选择的测试环境。