如何为RSpec system测试自动添加js: true元数据标签?
全局自动给system测试添加js: true的配置方法
你可以通过RSpec的元数据派生配置实现,不需要每个用例手动写js: true参数。
修改spec/rails_helper.rb中的RSpec配置块,添加以下代码:
RSpec.configure do |config| # 自动为所有type: :system的测试用例注入js: true元数据 config.define_derived_metadata(type: :system) do |metadata| metadata[:js] = true end end
配置完成后,你的system测试用例可以直接简化为如下写法,自动生效js: true:
require "rails_helper" RSpec.describe "redirect_to", type: :system do # 测试逻辑 end
如果你的RSpec版本低于3.7,不支持define_derived_metadata方法,可以改用before钩子实现:
RSpec.configure do |config| config.before(:each, type: :system) do |example| example.metadata[:js] = true end end
针对你的补充场景的优化方案
如果你已经将系统测试统一指定为type: :system,且不需要再用js: true适配database_cleaner,你可以直接调整database_cleaner的策略配置,完全不需要再使用js: true标签,配置参考如下:
RSpec.configure do |config| config.before(:suite) do DatabaseCleaner.strategy = :transaction DatabaseCleaner.clean_with(:truncation) end # 仅对system类型测试切换清理策略,不需要依赖js标签判断 config.before(type: :system) do DatabaseCleaner.strategy = :truncation end config.after(type: :system) do DatabaseCleaner.strategy = :transaction end config.before do DatabaseCleaner.start end config.after do DatabaseCleaner.clean end end
内容的提问来源于stack exchange,提问作者Dorian
相关产品推荐
相关产品推荐

