我认为有一种方法可以只运行给定标签的测试。有人知道吗?
答案 0 :(得分:174)
找到文档并不容易,但您可以使用哈希标记示例。例如
# spec/my_spec.rb
describe SomeContext do
it "won't run this" do
raise "never reached"
end
it "will run this", :focus => true do
1.should == 1
end
end
$ rspec --tag focus spec/my_spec.rb
有关GitHub的更多信息。 (任何有更好链接的人,请告知)
(更新)
RSpec现在是superbly documented here。有关详细信息,请参阅--tag option部分。
从v2.6开始,这种标记可以通过包含配置选项treat_symbols_as_metadata_keys_with_true_values
来更简单地表达,它允许你这样做:
describe "Awesome feature", :awesome do
将:awesome
视为:awesome => true
。
另请参阅this answer了解如何配置RSpec以自动运行“聚焦”测试。这对Guard非常有用。
答案 1 :(得分:101)
您可以使用--example (or -e) option运行包含特定字符串的所有测试:
rspec spec/models/user_spec.rb -e "User is admin"
我最常使用那个。
答案 2 :(得分:74)
在spec_helper.rb
:
RSpec.configure do |config|
config.filter_run focus: true
config.run_all_when_everything_filtered = true
end
然后根据您的规格:
it 'can do so and so', focus: true do
# This is the only test that will run
end
您也可以使用'fit'进行测试或使用'xit'进行排除,如下所示:
fit 'can do so and so' do
# This is the only test that will run
end
答案 3 :(得分:63)
或者您可以传递行号:rspec spec/my_spec.rb:75
- 行号可以指向单个规范或上下文/描述块(运行该块中的所有规范)
答案 4 :(得分:43)
您还可以将多个行号与冒号:
组合在一起$ rspec ./spec/models/company_spec.rb:81:82:83:103
输出:
Run options: include {:locations=>{"./spec/models/company_spec.rb"=>[81, 82, 83, 103]}}
答案 5 :(得分:24)
从RSpec 2.4(我猜)开始,您可以将f
或x
添加到it
,specify
,describe
和context
:
fit 'run only this example' do ... end
xit 'do not run this example' do ... end
http://rdoc.info/github/rspec/rspec-core/RSpec/Core/ExampleGroup#fit-class_method http://rdoc.info/github/rspec/rspec-core/RSpec/Core/ExampleGroup#xit-class_method
请确保config.filter_run focus: true
中有config.run_all_when_everything_filtered = true
和spec_helper.rb
。
答案 6 :(得分:3)
此外,您还可以运行默认情况下qZDbuPwNQGrgVmZCU9A7FUWbp8eIfn0Z
EwZVoQ5D5SEfdhiRsDfH6dU6tAovILCZ
cOqzODVP0GwbiNBwtmqLA78rFgV9d3VT
的规格
规格/ spec_helper.rb
focus: true
然后只需运行
RSpec.configure do |c|
c.filter_run focus: true
c.run_all_when_everything_filtered = true
end
只会进行重点测试
然后当您删除$ rspec
时,所有测试都会再次运行
更多信息:https://www.relishapp.com/rspec/rspec-core/v/2-6/docs/filtering/inclusion-filters
答案 7 :(得分:2)
在较新版本的RSpec中,配置支持fit
更加容易:
# spec_helper.rb
# PREFERRED
RSpec.configure do |c|
c.filter_run_when_matching :focus
end
# DEPRECATED
RSpec.configure do |c|
c.filter_run focus: true
c.run_all_when_everything_filtered = true
end
请参阅:
https://relishapp.com/rspec/rspec-core/docs/filtering/filter-run-when-matching
https://relishapp.com/rspec/rspec-core/v/3-7/docs/configuration/run-all-when-everything-filtered
答案 8 :(得分:0)
您可以rspec spec/models/user_spec.rb -e "SomeContext won't run this"
运行。