Я думаю, что есть способ запускать только тесты с данной меткой. Кто-нибудь знает?
Как запустить только определенные тесты в 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"
.