Я думаю, що існує спосіб запускати лише тести із заданою міткою. Хтось знає?
Я думаю, що існує спосіб запускати лише тести із заданою міткою. Хтось знає?
Відповіді:
Знайти документацію непросто, але ви можете позначити приклади за допомогою хеша. Напр.
# 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 .
З версії v2.6 цей тип тегів можна виразити ще простіше, включивши параметр конфігурації treat_symbols_as_metadata_keys_with_true_values
, який дозволяє робити:
describe "Awesome feature", :awesome do
де :awesome
поводиться так, ніби :awesome => true
.
Також дивіться цю відповідь, як налаштувати RSpec для автоматичного запуску "орієнтованих" тестів. Це особливо добре працює з Guard .
:focus
, що також запобігає потраплянню ,
в базу даних коду небажаних елементів , таких як "obvez.pry console.log" тощо.
rspec
програми :) Тому що доктор Relish цього не робить.
Ви можете запустити всі тести, що містять певну рядок, з опцією --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 / 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"
.