Ani*_*rya 7 ruby ruby-on-rails-3.2 database-cleaner
如果我单独使用rake minitest:controllers它,我的Minitest控制器测试工作正常,但是当我运行时,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
Run Code Online (Sandbox Code Playgroud)
Hen*_*zia 13
简短回答:
gem install "minitest-around"
Run Code Online (Sandbox Code Playgroud)
答案很长:
minitest中的before/after或setup/teardown 不是 rspec中的钩子,因此你不能在minitest中有多个before/after或setup/teardown,因为他们所做的只是重新定义方法.
为了解决这个问题,你可以使用minitest-around,这增加了支持多before/ after或setup/ teardown和around,只需将宝石添加到您的测试组:
# put in your Gemfile
gem 'minitest-around', group: :test
Run Code Online (Sandbox Code Playgroud)
要设置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
Run Code Online (Sandbox Code Playgroud)
在您的测试文件中:
# tests/your/test/file_test.rb
require 'support/database_cleaner'
# assertions here ...
Run Code Online (Sandbox Code Playgroud)
就是这样,有关详细信息,请参阅Github.
如果出于某种原因您不想添加“minitest-around” gem(具有多个设置和拆卸方法),您可以在您的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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4788 次 |
| 最近记录: |