Як запускати лише конкретні тести в Rspec?


159

Я думаю, що існує спосіб запускати лише тести із заданою міткою. Хтось знає?

Відповіді:


186

Знайти документацію непросто, але ви можете позначити приклади за допомогою хеша. Напр.

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


Тому вам не потрібно шукати, пряме посилання на пропозицію zetetic знаходиться тут (для Rspec 2.12) relishapp.com/rspec/rspec-core/v/2-12/docs/command-line/…
tir38

Ми додали специфіку до нашого набору, щоб переконатися, що код ніколи не зливається з фокусом: вірно все ще в контролі джерела. gist.github.com/jwg2s/7361603
jwg2s

@ jwg2s Я використовую гачок git для блокування комітетів :focus, що також запобігає потраплянню , в базу даних коду небажаних елементів , таких як "obvez.pry console.log" тощо.
zetetic

1
@Otheus ні, я просто фанат :) Мені дуже подобається те, що вони робили на Relish, але ТАК тільки що запустив свою функцію документації, тому ми можемо побачити деяку конкуренцію.
zetetic

1
Можливо, ви можете вказати мені на спосіб документації, яка фактично описує використання та фактичну поведінку rspecпрограми :) Тому що доктор Relish цього не робить.
Отей


90

У вашому 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

1
У rspec 3.5 воно є, config.filter_run_when_matchingі це могло б працювати лише додавши :focusприклад
Алі Ганаватій

4
Якщо випадково зафіксовано "focus: true", ваш CI пройде, незважаючи на те, що не пройшов більшість тестів.
зач

67

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


50

Ви також можете ввести рядки кількох рядків разом із двокрапкою:

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

Вихід:

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

Це так золото! 🙇🏾‍♂️
iGbanam

28

Станом на 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.


5

У нових версіях 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

Також ви можете запускати характеристики, які 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'та не мають вищевказаного коду, що виключає можливість виконання одного тесту, вказавши файл? Я не можу знайти жодної документації щодо цього.
Отей

1
spec_helper.rbзавжди включається , якщо у вас є --require spec_helperв .rspecв кореневому каталозі проекту.
Кріс

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.