Я думаю, что есть способ запустить только тесты с данным ярлыком. Кто-нибудь знает?
Я думаю, что есть способ запустить только тесты с данным ярлыком. Кто-нибудь знает?
Ответы:
Найти документацию непросто, но вы можете пометить примеры хешем. Например.
# 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 для автоматического запуска «сфокусированных» тестов. Это особенно хорошо работает с гвардией .
:focus
, что также предотвращает проникновение нежелательных сообщений, таких как 'binding.pry ,
console.log` и т. д., в базу кода.
rspec
программы :) Потому что Relish doc нет.
Вы можете запустить все тесты, которые содержат определенную строку, с опцией --example (или -e) :
rspec spec/models/user_spec.rb -e "User is admin"
Я использую это больше всего.
В вашем 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
config.filter_run_when_matching
и это может сработать, просто добавив :focus
к примеру
в качестве альтернативы вы можете передать номер строки: rspec spec/my_spec.rb:75
- номер строки может указывать на одну спецификацию или блок контекста / описания (запуск всех спецификаций в этом блоке)
Вы также можете записать несколько номеров строк вместе с двоеточием:
$ 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 (я думаю) вы можете предварять 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
.
В новых версиях 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
Также вы можете запустить спецификации, которые 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
spec/spec_helper.rb
всегда включен? Или только если вариантов не дано? Почему у тестовых модулей есть require 'spec_helber'
и не имеет ли приведенный выше код возможность исключить возможность выполнения одного теста, указав файл? Я не могу найти документацию по этому вопросу.
spec_helper.rb
всегда включается , если у вас есть --require spec_helper
в .rspec
в корневом каталоге проекта.
Вы можете запустить как rspec spec/models/user_spec.rb -e "SomeContext won't run this"
.