Как я могу сказать Rails использовать RSpec вместо test-unit при создании нового приложения Rails?

152

Я test-unitустановил и rspecустановил (наряду с -core, -expectations, -mocksи -railsверсии 2.6.x). Когда я запускаю команду rails new foo, она использует test-unitдля создания тестовых заглушек вместо rspec.

Есть ли вариант, где я могу сказать rails использовать rspec для генерации тестов?

aarona
источник

Ответы:

262

Следующее должно работать:

в командной строке:

rails new MYAPP -T # The -T option tells rails not to include Test::Unit

в Gemfile:

gem 'rspec-rails'

в командной строке:

bundle install
rails g rspec:install
Zabba
источник
Я думаю, что некоторые из этих шагов не в порядке, нет? Похоже, что это будет работать, если все сделано в правильном порядке. Пожалуйста, отредактируйте свой ответ, и я отмечу его как принятый.
Аарона
60
Вам не нужен generator.rbинициализатор, об этом позаботится поручитель RSpec. Все, что вам нужно, находится rspec-railsвнутри developmentгруппы, Gemfileкоторой достаточно для генераторов. Вам также не нужно создавать приложение -T, вы можете удалить testкаталог, и он будет работать.
Райан Бигг
1
Можете ли вы отредактировать код из g.test_framework =: rspec в g.test_framework: rspec
Дипак Ламичхане
8
@RyanBigg: с опцией -T мы "rails/test_unit/railtie"закомментируем этоapplication.rb
Giang Nguyen
13
Когда вы добавляете rspec-railsгем, важно проверять и разрабатывать его, иначе генераторы не будут использовать RSpec, даже если вы выполните описанные выше шаги.
февральИнк
73

Создайте свое новое приложение для рельсов как:

rails new <app_name> -T

Или удалите ваш testкаталог из существующего приложения:

rm -rf test/

Сделайте запись в вашем Gemfile:

gem 'rspec-rails'

Из командной строки установите гем

$ bundle install

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

$ rails g rspec:install

Теперь ваше приложение rails использует RSpec вместо test-unit.

Sayuj
источник
2
В этом списке отсутствовал шаг «установка пакета». Добавлен.
Чона
6

После того, как вы создали приложение rails с:

rails new <app_name> -T  # to exclude Test::Unit

Добавьте гем RSpec в свой Gemfile следующим образом:

group :development, :test do
  gem "rspec-rails"
end

В командной строке напишите:

bundle install  # this will install the missing gems

Теперь вам нужно установить RSpec, запустив:

rails generate rspec:install

Это создаст следующие файлы:

create  .rspec
create  spec
create  spec/spec_helper.rb
create  spec/rails_helper.rb

Я настоятельно рекомендовал прочитать все комментарии spec_helper и rails_helper, чтобы понять, что делает каждый параметр.

Когда все настроено, вы можете запустить все свои тесты с помощью:

bundle exec rspec

Вы можете прочитать больше о рекомендуемых конфигурациях spec_helper и rails_helper на https://kolosek.com/rails-rspec-setup .

Неша Зорич
источник
4

Я новый разработчик, и я только что сделал флаг rails (-rspec) для решения проблемы OP. Он избавляется от Test :: Unit и вставляет гем rails-rspec с помощью скрипта bash. Сценарий может быть изменен, чтобы помочь разработчикам Linux, автоматически добавляя gem therubyracer или создавая собственные флаги и наборы гемов. (возможно, специально перейдя к этой строке и удалив комментарий)

Вот суть &&, я надеюсь, это поможет кому-то там. https://gist.github.com/MTen/8310116

MTen
источник
0

Там нет собственного способа сделать это с railsCLI. Создайте новый проект без test-unit:

rails new rails-app --skip-test

А затем следуйте rspecинструкциям, чтобы интегрировать его в новое приложение Rails.

thisismydesign
источник