Как запустить один файл test / spec в RSpec?

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

не знаю, имеет ли это значение, но вот моя структура каталогов.

./Rakefile
./lib
./lib/cushion.rb
./lib/cushion
./lib/cushion/doc.rb
./lib/cushion/db.rb
./spec
./spec/spec.opts
./spec/spec_helper.rb
./spec/db_spec.rb

14 ответов


или вы можете пропустить грабли и использовать команду 'rspec':

rspec path/to/spec/file.rb

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

Если вы используете более старую версию rspec, это:

spec path/to/spec/file.rb

вызов raw:

rake spec SPEC=spec/controllers/sessions_controller_spec.rb \
          SPEC_OPTS="-e \"should log in with cookie\""

теперь выясните, как встроить это в ваш редактор.


этот вопрос старый, но он появляется в верхней части 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.рубидий. Тогда вы бежали бы:

rspec spec/models/foo_spec.rb:2

и было бы просто запустите эту спецификацию. На самом деле, это число может быть от 2 до 5.

надеюсь, что это помогает!


вы также можете использовать фактический текст тестового набора*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-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


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

в любом случае, все, что вам нужно сделать, это запустить файл с помощью Ruby. Код rspec достаточно умен, чтобы запустить тесты для вас.

например:

ruby myclass_spec.rb

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

Ruby 1.9.2 и Rails 3 имеют простой способ запустить один файл спецификации:

  ruby -I spec spec/models/user_spec.rb

пояснение:

  • ruby команда имеет тенденцию быть быстрее, чем
  • -I spec означает "включить каталог" spec " при поиске файлов"
  • spec/models/user_spec.rb - это файл, который мы хотим запустить.

У меня были проблемы с получением любого из этих примеров для работы, может быть, потому, что пост старый, и команды изменились?

после некоторого копания я нашел это работает:

спецификации rspec / модели / user_spec.rb

Это будет работать только один файл и обеспечивает полезный вывод в терминале.


specky.ВИМ


для выполнения все ваших файлов rspec:rspec

Примечание: Вы должны быть в корне вашего проекта

для выполнения один для RSpec файл: rspec 'path_to/spec.rb'

Примечание: заменить ' path_to / spec.РБ с вашего пути. Кавычки необязательны.

для выполнения один rspec тест из одного файла: rspec 'path_to/spec.rb:7'

Примечание:: 7 номер строки, где тест начинается


альтернативно, посмотрите на autotest.

запуск autotest в окне команды будет означать, что файл спецификации будет выполняться всякий раз, когда вы его сохраните. Кроме того, он будет запускаться всякий раз, когда файл, который вы задаете, запускается.

например, если у вас есть файл спецификации модели person_spec.rb и файл модели, который он определяет, называется person.rb, то всякий раз, когда вы сохраняете любой из этих файлов из редактора, файл спецификации будет выполнен.


допустим, вы запускаете тест для создания todo. Вы всегда можете запустить этот конкретный код спецификации 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

надеюсь, это дает вам больше понимания!


хотя многие великие ответы были записаны на этот вопрос, ни один из них не использует Rspec tags подход.

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

например, я добавляю тег " 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

различные теги / значения могут быть установлены в отдельных спецификациях или группах.