Як запускати один тестовий / специфікаційний файл у RSpec?


282

Я хочу мати змогу запустити тести одного файлу специфікації - наприклад, для одного файлу, який я редагую. rake specвиконує всі характеристики. Мій проект не є проектом Rails, тому rake spec:docне працює.

Не знаю, чи це має значення, але ось моя структура каталогів.

./Ракефіл
./lib
./lib/cushion.rb
./lib/cushion
./lib/cushion/doc.rb
./lib/cushion/db.rb
./спец
./spec/spec.opts
./spec/spec_helper.rb
./spec/db_spec.rb

Відповіді:


392

Або ви можете пропустити граблі та скористатися командою 'rspec':

rspec path/to/spec/file.rb

У вашому випадку я думаю, що поки ваш файл ./spec/db_spec.rb містить відповідні помічники, він повинен працювати добре.

Якщо ви використовуєте старішу версію rspec, це:

spec path/to/spec/file.rb

31
з новим rspec вам доведеться використовувати "rspec шлях / до / file.rb"
djburdick

3
Можливо, я роблю це неправильно, але я повинен зробити "bundle exec rspec path / to / spec / file.rb"
andrhamm

2
Якщо ви використовуєте Rails, ви, ймовірно, захочете виконати свої характеристики за допомогою Rake, щоб переконатися, що ви починаєте з порожньої бази даних.
суперлюмінація

@andrhamm, ти просто запускаєш свої характеристики в контексті своєї групи. Це необхідно, якщо ви не використовуєте gemsets (які за замовчуванням використовуються з rvm і є окремим розширенням до rbenv)
Caleb

6
Якщо ви хочете виконати лише один тест, ви додасте до рядка номер тесту початку тесту. Приклад: шлях rspec / до / spec / file.rb: 455
runamok

201

Неочищена виклик:

специфікація граблі SPEC = spec / контролери / сеанси_controller_spec.rb \
          SPEC_OPTS = "- e \" повинен увійти за допомогою файлу cookie \ ""

Тепер з’ясуйте, як вставити це у свій редактор.


1
Як я вже сказав, я не в рейках, тому немає контролерів. Але так, "rake spec SPEC = file.rb" працює. Дякую! Зараз я працюю над інтеграцією Emacs.
Джонатан Тран

5
Не запускайте граблі, якщо ви можете цього уникнути. Триває вік фрікіна
Оріон Едвардс

2
Я змінив прийняту відповідь, але парам SPEC_OPTS також був мені в нагоді.
Джонатан Тран

2
Тепер це я називаю гарною відповіддю. Чому це не позначено як "Відповідь"?
посмішка

1
Запуск специфікації безпосередньо це часто кращий вибір, але є багато раз , коли ви повинні запустити граблі для різних бітів магії в звичаї Rakefile
Nerdmaster

124

Це питання старе, але воно з’являється вгорі Google, коли шукають, як запустити єдиний тест. Я не знаю, чи це нещодавнє доповнення, але для того, щоб запустити один тест із специфікації, ви можете зробити наступне:

rspec path/to/spec:<line number>

де-рядковий номер - номер рядка, який містить частину вашого тесту. Наприклад, якщо у вас була така специфікація, як:

1: 
2: it "should be awesome" do
3:   foo = 3
4:   foo.should eq(3)
5: end
6:

Скажімо, це збережено у spec / models / foo_spec.rb. Тоді ви біжите:

rspec spec/models/foo_spec.rb:2

і він би просто запустив цю одну специфікацію. Насправді це число може бути від 2 до 5.

Сподіваюсь, це допомагає!


Це цікаво, хоча, схоже, це не працює, коли ви перефактуруєте свою специфікацію у декілька файлів (тобто ви можете використовувати її лише з головним файлом _spec.rb, але якщо жоден із ваших прикладів не міститься, він нічого не запустить Також, якщо ви спробуєте використати його для файлу, який не є специфікаційним файлом верхнього рівня, він також нічого не запустить.)
Trejkaz,

Я не дуже стежу за цим. Що ви маєте на увазі під "специфікацією верхнього рівня"? Мій тестовий набір майже завжди розділений на кілька файлів, і я завжди можу викликати тести в одному файлі за допомогою цього методу. Ви маєте на увазі наявність файлу, який є requireвашими іншими специфікаційними файлами?
juanpaco

Я можу використовувати це у будь-якому файлі на будь-якому рівні відповідно до специфікації / каталогу. Я вважаю, що Трейказ неправильний.
Майкл Дюрант

7
це приголомшливо і повинно бути зверху!
Томмазо Барбуглі

4
Я цим постійно користуюся, але іноді вам потрібно запустити кілька тестів з одного файлу. Тоді ви можете ввести всі приклади так:rspec spec/models/foo_spec.rb:2:12:49
swilgosz

61

Ви також можете використовувати фактичний текст тестового випадку * e * xample -e!

Отже для:

it "shows the plane arrival time"

ви можете використовувати

rspec path/to/spec/file.rb -e 'shows the plane arrival time'
./scripts/spec path/to/spec/file.rb -e 'shows the plane arrival time'

тут не потрібно граблі.


Це все, що вам потрібно, за винятком того, що "spec" слід замінити на "rspec", як зазначено @bandhunt
Nicolas Wormser

19

з довідки (spec -h):

-l, --line LINE_NUMBER           Execute example group or example at given line.
                                 (does not work for dynamically generated examples)

Приклад: spec spec / runner_spec.rb -l 162


3
У нових версіях Rspec ви додаєте номер рядка після двокрапки :за документацією та популярною відповіддю.
dragon788

13

Якщо ви встановили rspec як плагін, а не як дорогоцінний камінь, specвиконуваного файлу у вас не буде .

У будь-якому випадку, все, що вам потрібно зробити, це запустити файл за допомогою рубіну. Код rspec досить розумний, щоб запустити тести для вас.

наприклад:

ruby myclass_spec.rb

2
Чи можливо запустити один тест у файлі, як цей?
Ян Вон

12

http://github.com/grosser/single_test дозволяє робити такі речі, як ..

rake spec:user          #run spec/model/user_spec.rb (searches for user*_spec.rb)
rake test:users_c       #run test/functional/users_controller_test.rb
rake spec:user:token    #run the first spec in user_spec.rb that matches /token/
rake test:user:token    #run all tests in user_test.rb that match /token/
rake test:last
rake spec:last

Здається, що дорогоцінний камінь не підтримувався, останній вчинок був 5 років тому!
thegreendroid

10

У Ruby 1.9.2 та Rails 3 є простий спосіб запустити один специфікаційний файл:

  ruby - я специфікація / моделі / user_spec.rb

Пояснення:

  • rubyкоманда, як правило, швидша, ніж rakeкоманда
  • -I spec означає "включити каталог" spec "при пошуку файлів"
  • spec/models/user_spec.rb це файл, який ми хочемо запустити.

Чи можете ви запустити один тест у цьому файлі з деякими додатковими параметрами?
Ян Вон

10

Щоб запустити всі ваші rspec файли:rspec

Примітка: ви повинні бути в корені свого проекту

Щоб запустити один rspec файл:rspec 'path_to/spec.rb'

Примітка: замініть "path_to / spec.rb" своїм шляхом. Лапки необов’язкові.

Щоб запустити один тест rspec з одного файлу:rspec 'path_to/spec.rb:7'

Примітка: 7 - номер рядка, з якого починається тест


5

У мене виникли проблеми з тим, щоб працювати з будь-яким із цих прикладів, можливо, тому, що повідомлення старе і команди змінилися?

Після деяких роздумів я виявив, що це працює:

rspec spec / models / user_spec.rb

Це запустить лише один файл і надасть корисний висновок у терміналі.


Про це йшлося у коментарі у прийнятій відповіді. Так, я думаю, що ця публікація настільки стара, що назва команди змінилася.
Джонатан Тран

4

specky.vim


3

Крім того, перегляньте автотест.

Запуск автотестування у вікні команди означатиме, що файл специфікації буде виконуватися кожного разу, коли ви його збережете. Крім того, він запускатиметься кожного разу, коли запускається файл, який ви шукаєте.

Наприклад, якщо у вас є модельний файл специфікації під назвою person_spec.rb та файл моделі, який він називає person.rb, тоді, коли ви збережете будь-який із цих файлів у своєму редакторі, файл специфікації буде виконуватися.


3

Хоча на це запитання було написано багато чудових відповідей, жодна з них не використовує підхід Rspectags .

Я використовую теги для запуску однієї або декількох специфікацій у різних файлах - лише тих, що стосуються мого поточного завдання на розробку.

Наприклад, я додаю тег "dev" зі значенням "current":

it "creates an user", dev: :current do
  user = create(:user)
  expect(user.persisted?).to be_truthy
end

то я біжу

bundle exec rspec . --tag dev:current

В окремих специфікаціях або групах можна встановити різні теги / значення.


2

Скажімо, ви виконуєте тест на створення тодо. Ви завжди можете запустити цей специфічний код todo, використовуючи файл crete_spec.rb, як показано нижче.

      rspec/spec/features/controller/spec_file_name.rb

   Example:

   Creating  rspec spec/features/todos/create_spec.rb
   Editing   rspec spec/features/todos/edit_spec.rb
   Deleting  rspec spec/features/todos/destroy_spec.rb

Якщо ви хочете запустити всі характеристики за один короткий.

   rspec 

Якщо ви хочете запустити всі характеристики у конкретного користувача контролера, це.

  rspec/spec/feaures/controller_name

  Example:   rspec/spec/features/todos

Сподіваюся, це дає більше розуміння!

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