Ruby on Rails: переключіться з test_unit на rspec


75

Я переглядаю навчальний посібник, який пропонував використовувати rspec, але я вже пройшов безліч встановлення рейок за замовчуванням. Я справді не хочу взагалі переробляти інсталяцію. У всякому разі, коли я біжу

$ rails g integration_test named

я отримав

  invoke  test_unit
  create    test/integration/named_test.rb

Коли я біжу bundle, різні rspecдорогоцінні камені перелічуються, але test_unitїх немає. Здається, підручник має виклик рейок rspecзамість того, test_unitщоб робити щось додаткове. Як отримати рейки для використання rspecз командою генератора тестів інтеграції?

Відповіді:


107

У вашому config/application.rbфайлі:

config.generators do |g|
  g.test_framework :rspec
end

Тепер, коли ви запускаєте свої генератори (приклад rails generate scaffold post), ви отримуєте тестові файли rspec. Не забудьте перезапустити сервер. Для отримання додаткової інформації про генератори див .:

RailsCasts # 216 Генератори в Rails 3

Якщо ви дійсно хочете скористатися генератором інтеграції_тесту, вам потрібно буде спеціально змінити команду:

rails g integration_test named --integration-tool=rspec

1
Я це вже зробив .. що ви маєте на увазі під перезапуском сервера? Це ніколи не працювало.
Таблетки від вибуху

1
я маю на увазі перезапуск spork або ваш тестовий інтерфейс. Якщо ви правильно зробили це і виконали 'rails g scaffold --help', ви повинні бачити 'rspec' як основу тестування за замовчуванням. Перевірте і мою редакцію.
Спірос,

1
Я оновив файл config / application.rb, як ви вказали та запустили, rails g scaffold --helpі все ще пише test_unit. Чи потрібно щось робити, щоб перезапустити конфігурацію, або змінити ці налаштування вручну?
Вибухові таблетки

Для майбутніх користувачів, які хочуть піти іншим шляхом, залишивши цей коментар для повноти: Використовуйте наведену вище відповідь з g.test_framework :test_unit.
pjammer

як повернутися назад? Чи можу я використовувати обидва генератори одночасно?
DataGreed

72

Працюючи з Rails 3.2.8 та rspec-rails 2.11.4 , я виявив, що моя проблема в моєму Gemfile. Я був rspec-railsу :testгрупі, але не в :developmentгрупі. Оскільки Rails за замовчуванням працює в режимі розробки (в тому числі, коли ви запускаєте згенерувати), rspec-railsвін повинен бути у вашій :developmentгрупі, щоб він підключив генератори. Як тільки у мене було це на місці, все працювало нормально.


4
+1 rspec-rails встановлюється як railitie github.com/rspec/rspec-rails/blob/master/lib/… і налаштовується як тестовий фреймворк та інструмент інтеграції. Тож можна включити самоцвіт у спільну групу у gemfilegroup :development, :test do
brutuscat

Все ще актуальний через 7 років!
Grant

28

Що стосується Rails 3.2.12, виконайте ці дії по порядку

rails new app_name --skip-test-unit

Додайте rspec-rails до вашого Gemfile у розробці, тестовій групі

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

Біжи bundle install

Запустіть генератор

rails generate rspec:install

... та очистіть існуючий каталог тестів:

rm -Rf $RAILS_ROOT/test    

8
Це спрацює, якщо проект також уже створений. Просто ігноруйте rails newкоманду.
Раель Гугельмін Кунья,

Слідкуйте за допомогою rm -Rf $RAILS_ROOT/testкоманди, ви також видалите попередній перегляд вашої поштової
Йоко

9

Натрапив на це питання сьогодні. application.rb слід оновити за допомогою:

config.generators do |g|
  g.test_framework :rspec
  g.integration_tool :rspec
end

6
редагування файлу application.rb більше не потрібно, принаймні на Rails 3.2 з rspec-rails
prusswan

8

Щоб використовувати RSpec замість стандартного Test :: Unit, виконайте спочатку таку команду

$ rails generate rspec:install

Ця команда створить наступну папку / файли

create  .rspec
create  spec
create  spec/spec_helper.rb

Тепер, коли ви використовували генератор для генерації компонентів рейок, таких як контролер, модель тощо, він створюватиме відповідні RSpecs.


Це не буде працювати (напрямки 4), якщо у вас вже немає rspec у вашому Gemfile. Дивіться відповідь fontno нижче.
tgf

як повернутися назад? Чи можу я використовувати обидва генератори одночасно?
DataGreed


2

1. при створенні нової програми rails пропустіть фреймворк TestUnit, інакше він створить каталог test_unit.

$rails new your_app --skip-test-unit

2. додайте код нижче у файл your_app / config / application.rb:

config.generators do |g| g.test_framework :rspec end

3. додайте код нижче в Gemfile вашого_апп:

group :test, :development do gem 'rspec-rails' end збережіть його та запустіть, bundle installщоб встановити rspec gem

4. Ініціалізуйте каталог специфікацій /

rails generate rspec:install

докладніше, будь ласка, зверніться: https://github.com/rspec/rspec-rails


1

Що я виявив, що я зробив, що деякі інші методи все ще працюють, це перевірити свій правопис .... Я мав те, що @tovodeverett групувало rspec-rails з: development і: test, але розробку написано неправильно. Це вирішило мою проблему, але я створював тести за допомогою test_unit замість rspec.


1
$ rails g model Account
      invoke  active_record
      create    db/migrate/20140205052617_create_accounts.rb
      create    app/models/account.rb
      invoke    test_unit
      create      test/models/account_test.rb
      create      test/fixtures/accounts.yml
$ rails d model Account

Запуск сценарію / rails генерує rspec: install не додає rspec як стандартну структуру. Додана нижче команда в config / application.rb, і тоді вона працює

config.generators do |g|
  g.test_framework :rspec
end
$ rails g model Account
      invoke  active_record
      create    db/migrate/20140205052957_create_accounts.rb
      create    app/models/account.rb
      invoke    rspec
      create      spec/models/account_spec.rb
$ rails -v
Rails 4.0.2
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.