Как запустить только определенные тесты в Rspec? - PullRequest
148 голосов
/ 21 февраля 2011

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

Ответы [ 9 ]

174 голосов
/ 22 февраля 2011

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

# 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 option .

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

describe "Awesome feature", :awesome do

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

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

102 голосов
/ 22 июня 2011

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

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

Я пользуюсь этим больше всего.

76 голосов
/ 27 мая 2014

В вашем 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
63 голосов
/ 21 февраля 2011

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

43 голосов
/ 02 декабря 2013

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

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

Выход:

Run options: include {:locations=>{"./spec/models/company_spec.rb"=>[81, 82, 83, 103]}}
24 голосов
/ 01 марта 2014

Начиная с 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

Убедитесь, что в вашем spec_helper.rb.

есть config.filter_run focus: true и config.run_all_when_everything_filtered = true.
3 голосов
/ 31 марта 2018

В более новых версиях 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

3 голосов
/ 02 сентября 2015

Также вы можете запустить спецификации, которые имеют 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

0 голосов
/ 22 февраля 2016

Вы можете запустить как rspec spec/models/user_spec.rb -e "SomeContext won't run this".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...