Как запустить только определенные тесты в Rspec?

Я думаю, что есть способ запускать только тесты с данной меткой. Кто-нибудь знает?

Ответ 1

Нелегко найти документацию, но вы можете пометить примеры хешем. Например.

# 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 теперь великолепно задокументирован здесь. Подробнее см. В разделе - tag.

Начиная с версии 2.6 этот тег можно выразить еще проще, включив опцию конфигурации treat_symbols_as_metadata_keys_with_true_values, которая позволяет:

describe "Awesome feature", :awesome do

где :awesome обрабатывается так, как если бы он был :awesome => true.

Также см. этот ответ о том, как настроить RSpec для автоматического запуска "сфокусированных" тестов. Это особенно хорошо работает с Guard.

Ответ 2

Вы можете запускать все тесты, содержащие определенную строку, с - пример (или -e):

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

Я использую это наиболее.

Ответ 3

альтернативно вы можете передать номер строки: rspec spec/my_spec.rb:75 - номер строки может указывать на одну спецификацию или блок context/describe (выполняющий все спецификации в этом блоке)

Ответ 4

В вашем 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

Ответ 5

Вы также можете ввести несколько номеров строк вместе с двоеточием:

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

Вывод:

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

Ответ 6

Как и 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.

Ответ 7

Также вы можете запускать спецификации, у которых focus: true по умолчанию

спецификации/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

Ответ 8

Вы можете работать как rspec spec/models/user_spec.rb -e "SomeContext won't run this".