如何在 rspec 中运行单个测试?
Posted
技术标签:
【中文标题】如何在 rspec 中运行单个测试?【英文标题】:How to run a single test in guard for rspec? 【发布时间】:2014-02-03 07:53:15 【问题描述】:我使用guard-rspec 在我的文件更改时自动运行必要的 rspec 测试,我喜欢它的工作原理。然而,当我调试一个包含多个测试的文件时,有时我只想重新运行一个单独的测试。例如,使用命令行中的 rspec:
rspec spec/requests/my_favorite_spec.rb:100
这将只运行my_favorite_spec.rb
中第 100 行的单个规范。
我尝试将上述内容输入到守卫控制台,但它只是运行了所有测试,就好像我刚刚按下了回车键一样。守卫控制台中是否有另一种语法来运行单个规范?
【问题讨论】:
【参考方案1】:我认为您可以为要运行的规范添加“focus: true”选项,例如
it 'does something', focus: true do
//your spec
end
然后你保存文件,然后守卫只运行那个专注的测试
完成后,您只需删除“focus: true”
【讨论】:
【参考方案2】:您必须为您的spec/spec_helper.rb
文件提供参数以接受:focus => true
声明。
RSpec.configure do |config|
config.filter_run :focus => true
end
然后就可以使用了
it 'does something', :focus => true do
//your spec
end
或
describe "something", :focus => true do
before do
sign in
visit page
end
it does something
it does something else
end
如果您打算采用这种方法,您可能还想确保在任何地方都没有:focus => true
时运行所有规范,使用documented approach:
RSpec.configure do |config|
config.run_all_when_everything_filtered = true
end
您可以使用过滤器做很多事情;你可能想看看这个页面:https://relishapp.com/rspec/rspec-core/v/3-0/docs/filtering
【讨论】:
这正是我所需要的,而且链接也很有帮助。谢谢! 这行得通,但是当我从it
块中删除:focus => true
时,guard
说All examples were filtered out
。显然这不能满足明显的工作流程。如果不存在 :focus
子句,则完整的解决方案将运行所有示例。
好的,当没有:focus
子句时,您可以运行所有规范,通过config.run_all_when_everything_filtered = true
块中的config.run_all_when_everything_filtered = true
。这里是the docs。
有没有办法从命令行做到这一点?我正在尝试使命令行功能同时适用于警卫和并行规范【参考方案3】:
您可以在 Guardfile 中使用 failed_mode: :focus
,如下所述:https://github.com/guard/guard-rspec#list-of-available-options
【讨论】:
以上是关于如何在 rspec 中运行单个测试?的主要内容,如果未能解决你的问题,请参考以下文章
在 Rails 的 rspec 中,我如何编写/编辑我的测试文件,以便特定上下文中的示例以设定的顺序运行?
Rspec 如何测试 Sidekiq 作业是不是计划在特定时间运行
RSpec:如何获得`c.filter_run_excluding`排除的测试数量?