Rspec 中的数据库清理策略

Database cleaner strategy in Rspec

是否可以在测试用例中随时检查数据库清理器策略?

我如何知道测试用例中使用了哪种类型的策略?

config.before(:example) do
  DatabaseCleaner.strategy = :transaction
end

config.before(:example, type: :feature, js: true) do
  DatabaseCleaner.strategy = :truncation
end

require 'rails_helper'
RSpec.feature 'Login Feature', type: :feature do
  it 'invalid user login fail' do
    a = create(:normal_user, role: AdminType::OWNER)
    visit('/')
  end
end

在这里,我在最上面的 describe 块(示例组)中提到了类型作为一个特征,而不是在示例中。但是我已经将我的数据库清理器配置为在其他使用事务策略的要素类型示例上使用截断策略。

数据库清理器将使用哪种类型的策略,截断还是事务?

如果它使用截断策略,那么我认为type: feature下的所有示例都会被视为type: feature个示例。我说得对吗?

我将如何检查当前策略是什么(例如,通过查看测试日志)?

是 - RSpec.feature 块内的任何测试都将具有 tpye: :feature 元数据,除非它通过指定另一种类型进行覆盖。系统规范和功能规范基本上是一回事,只是 Rails 在系统测试上添加了一个额外的抽象层(driven_by,等等)

在 Rails 5.1+ 中,对于功能或系统测试,即使使用 RSpecs 系统测试而不是基于 Rails minitest 的系统测试,通常也不需要 DatabaseCleaner。这是因为Rails 5.1 在测试环境中添加了自动共享测试进程中所有线程之间的数据库连接。如果您在测试期间需要一个单独的进程来访问数据库,那么您仍然需要 DatabaseCleaner,但这并不常见,尤其是对于刚开始的项目。