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

StackOverflow https://stackoverflow.com/questions/143925

  •  02-07-2019
  •  | 
  •  

Вопрос

Я хочу иметь возможность запускать тесты одного файла спецификации — например, для одного файла, который я редактирую. 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
Это было полезно?

Решение

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

rspec path/to/spec/file.rb

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

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

spec path/to/spec/file.rb

Другие советы

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

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

здесь нет необходимости в граблях.

из справки (spec -h):

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

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

Бежать ВСЕ из ваших файлов rspec: rspec

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

Бежать один файл rspec: rspec 'path_to/spec.rb'

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

Бежать один rspec тест из одного файла: rspec 'path_to/spec.rb:7'

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

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

Немного покопавшись, я обнаружил, что это работает:

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

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

спеки.вим

В качестве альтернативы взгляните на автотестирование.

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

Например, если у вас есть файл спецификации модели с именем 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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top