【发布时间】:2018-10-25 09:47:16
【问题描述】:
是否可以在测试用例的任何时候检查数据库清理策略是什么?
我如何知道测试用例中使用了哪种类型的策略?
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 示例。我说的对吗?
我将如何检查当前的策略是什么(例如,通过查看测试日志)?
【问题讨论】:
-
为什么需要知道?您的测试是否依赖于一种特定的策略?又失败了?为什么?我认为无论您如何设置数据库,您的测试都应该始终通过。
-
@spickermann 如果有办法,我想知道/确认它是否根据我的数据库清理器配置使用了正确的 startgey。 .so 标记为 type:feature 的示例组下的所有示例都将被视为 type:feature 示例??
-
RSpec.featuure已经添加了type: feature元数据,因此您无需再次指定它。另外,您使用的是什么版本的 Rails? (Rails 5.1 及以上版本一般不需要DatabaseCleaner) -
哦,太好了。感谢您提供的信息。 @ThomasWalpole 我正在使用 Rails 5.0.2。所以 Rspec.feature 块下的所有示例都将被视为特征类型示例?换句话说,Rspec.feature 块下的所有示例都将具有类型:特征元数据?使用系统规范而不是功能规范有什么优势??。如果我使用 Rails 自定义系统测试用例 5.1 或更高版本,我只需要在测试用例中使用 minitest 语法??
-
还有一个疑问,在 Rails 5.1 或更高版本中,如果我想将 rspec 与系统规范一起使用,那么我是否需要数据库清洁器 gem? @ThomasWalpole
标签: ruby-on-rails ruby capybara rspec-rails