如何配置Brakeman在Rails测试执行前自动运行?(MiniTest+Rails5)
在Rails 5中让Brakeman随MiniTest自动执行
嘿,我来帮你搞定这个需求!在Rails 5里结合MiniTest,让Brakeman扫描自动跟着测试流程跑,分两种场景来实现:
一、手动一次性组合命令
如果只是临时需要先跑Brakeman再执行测试,可以直接在命令行用&&连接两个命令:
bundle exec brakeman && bundle exec rake test
这个命令的逻辑是:
- 先执行Brakeman安全扫描
- 只有当Brakeman扫描通过(退出码为0,无严重安全问题)时,才会继续运行MiniTest测试
- 如果Brakeman检测到高危问题退出,测试会自动终止
二、设置自动随测试任务执行
要是想让Brakeman每次执行测试都自动先跑,可以通过修改Rake任务来实现,步骤如下:
- 在你的Rails项目中创建(或编辑)
lib/tasks/brakeman.rake文件 - 写入以下Rake任务代码:
namespace :test do task :brakeman do # 执行Brakeman扫描,若扫描失败则终止后续任务 sh "bundle exec brakeman" # 如果你希望即使Brakeman发现警告也继续跑测试,可以改成下面这行(不推荐) # sh "bundle exec brakeman || true" end end # 让默认的test任务先执行brakeman检查 Rake::Task[:test].enhance [:test_brakeman]
原理说明
- 我们给
test命名空间添加了一个:brakeman子任务,负责调用Brakeman扫描 - 通过
enhance方法给原有的:test任务添加依赖,这样每次执行bundle exec rake test时,都会先跑完test:brakeman任务,再执行测试
另外,如果你习惯用rails test命令(Rails 5也支持这个替代rake test),这个设置同样生效,因为底层还是调用的Rake测试任务。
内容的提问来源于stack exchange,提问作者klenwell
相关产品推荐
相关产品推荐

