如何通过单条RSpec命令运行多个spec文件夹?
嘿,我刚好有过类似的多子模块gem测试配置经验,给你几个实用方案搞定在simple_skills根目录一键跑所有spec的需求!
方案一:直接用rspec命令指定所有测试路径
这是最直接的方式,不用额外配置,在simple_skills根目录的终端里执行这条命令就行:
rspec configurable/spec injectable/spec defaultable/spec
它会一次性遍历三个子文件夹下的所有*_spec.rb文件并执行测试。后续要是新增子模块,只需要把对应的xxx/spec路径追加到命令里就好。
方案二:配置根目录的.rspec文件省掉长命令
如果你不想每次都敲一大串路径,可以在根目录创建或修改.rspec文件,添加以下内容:
--default-path configurable/spec --default-path injectable/spec --default-path defaultable/spec
之后你只需要在根目录敲rspec,它就会自动加载这三个路径下的所有测试文件,省心不少!
方案三:用Rake任务统一管理(适合长期扩展)
如果你的gem已经有Rakefile,推荐用这种方式,后续新增子模块只需要改一行代码:
在Rakefile里添加这个自定义任务:
require 'rspec/core/rake_task' RSpec::Core::RakeTask.new(:all_specs) do |t| t.pattern = [ 'configurable/spec/**/*_spec.rb', 'injectable/spec/**/*_spec.rb', 'defaultable/spec/**/*_spec.rb' ] end # 设置默认rake任务为跑所有测试 task default: :all_specs
之后你只需要敲rake或者rake all_specs就能执行所有测试了,非常适合子模块越来越多的场景。
额外注意点
记得确保每个子模块的spec_helper.rb能正确加载对应的lib文件,或者在根目录新建一个spec_helper.rb统一处理依赖加载:
# 根目录spec/spec_helper.rb ['configurable', 'injectable', 'defaultable'].each do |module_name| require_relative "../#{module_name}/lib/#{module_name}" end
这样所有子模块的代码都会被正确加载,测试时就不会出现“找不到某个类/方法”的报错啦。
内容的提问来源于stack exchange,提问作者Josh Hadik
相关产品推荐
相关产品推荐

