Как вы запускаете один файл 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

15 ответов

Решение

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

rspec path/to/spec/file.rb

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

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

spec path/to/spec/file.rb

Необработанный вызов:

rake spec SPEC = spec / controllers / session_controller_spec.rb \
          SPEC_OPTS="-e \" должен войти в систему с помощью cookie\""

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

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

rspec path/to/spec:<line number>

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

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.

Надеюсь это поможет!

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

здесь не нужно граблей

Из справки (спец-ч):

-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: rspec

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

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

примечание: замените path_to/spec.rb на ваш путь. Кавычки необязательны.

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

примечание::7 - номер строки, с которой начинается тест

Если вы установили 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 Команда, как правило, быстрее, чем rake команда
  • -I spec означает "включать каталог" spec "при поиске файлов"
  • spec/models/user_spec.rb это файл, который мы хотим запустить.

Хотя на этот вопрос было написано много хороших ответов, ни один из них не использует 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

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

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

После некоторого осмотра я нашел это работает:

rspec spec / models / user_spec.rb

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

specky.vim

Кроме того, посмотрите на автотест.

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

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

Допустим, вы запускаете тест на создание задачи. Вы всегда можете запустить этот конкретный код спецификации 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 spec/models/model_spec.rb:47
Другие вопросы по тегам