如何只在 Rspec 运行特定的测试?

我认为有一种方法可以只对给定的标签进行测试,有人知道吗?

89611 次浏览

或者你可以传递行号: rspec spec/my_spec.rb:75-行号可以指向一个规范或上下文/描述块(运行该块中的所有规范)

您可以使用 :focus散列属性标记示例,

# spec/foo_spec.rb
RSpec.describe Foo do
it 'is never executed' do
raise "never reached"
end


it 'runs this spec', focus: true do
expect(1).to eq(1)
end
end
rspec --tag focus spec/foo_spec.rb

更多关于 GitHub的信息

(更新)

RSpec 现在是 在 relishapp.com 上有精彩的记录。有关详细信息,请参阅 标签选项部分。

在2.6版本中,这种标记可以通过包含配置选项 treat_symbols_as_metadata_keys_with_true_values来更简单地表示,它允许您执行以下操作:

describe "Awesome feature", :awesome do

其中 :awesome被当作 :awesome => true来处理。

另外,请参阅 这个答案了解如何配置 RSpec 来自动运行“聚焦”测试。

可以使用 —— example (or-e)选项运行包含特定字符串的所有测试:

rspec spec/models/user_spec.rb -e "User is admin"

我用得最多的一个。

你也可以用冒号连接多个行号:

$ rspec ./spec/models/company_spec.rb:81:82:83:103

产出:

Run options: include {:locations=>{"./spec/models/company_spec.rb"=>[81, 82, 83, 103]}}

从 RSpec 2.4开始(我猜) ,你可以在 itspecifydescribecontext前面加上一个 f或者 x:

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

确保 spec_helper.rb中有 config.filter_run focus: trueconfig.run_all_when_everything_filtered = true

确保在 spec_helper.rb中配置了 RSpec 以注意 focus:

RSpec.configure do |config|
config.filter_run focus: true
config.run_all_when_everything_filtered = true
end

然后在你的参数中加入 focus: true作为参数:

it 'can do so and so', focus: true do
# This is the only test that will run
end

您还可以通过将 it更改为 fit(或排除使用 xit的测试)来关注测试,如下所示:

fit 'can do so and so' do
# This is the only test that will run
end

也可以运行缺省情况下具有 focus: true的规格

Spec/spec _ helper. rb

RSpec.configure do |c|
c.filter_run focus: true
c.run_all_when_everything_filtered = true
end

那就跑吧

$ rspec

只进行集中测试

然后,当您删除 focus: true所有测试很好地再次运行

更多信息: https://www.relishapp.com/rspec/rspec-core/v/2-6/docs/filtering/inclusion-filters

你可以作为 rspec spec/models/user_spec.rb -e "SomeContext won't run this"运行。

在 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

您可以简单地使用 filter_run_includingfilter_run_excluding通过任何元数据运行

例如下面这行只允许运行 Rails 系统测试

config.filter_run_including type: :system

这一行将允许运行除 Rails 系统测试之外的所有内容

config.filter_run_excluding type: :system