Як запустити єдиний тест з набору тестів рейків?


Відповіді:


158

ПРИМІТКА. Цей тест не запускається через rake. Тож будь-який код, який у вас є Rakefile, НЕ буде виконаний.

Щоб запустити єдиний тест, використовуйте таку команду з головного каталогу вашого рейкового проекту:

ruby -I test test/unit/my_model_test.rb -n test_name

Це запускає єдиний тест з назвою "ім'я", визначений у класі MyModelTest у зазначеному файлі. Ім'я тесту формується, беручи ім'я тесту, попередньо додавши його до слова "тест", після чого відокремлюючи слова підкресленнями. Наприклад:

class MyModelTest < ActiveSupport::TestCase

  test "valid with good attributes" do
    # do whatever you do
  end

  test "invalid with bad attributes" do
    # do whatever you do
  end
end

Ви можете запустити обидва тести за допомогою:

ruby -I test test/unit/my_model_test.rb

і лише другий тест через

ruby -I test test/unit/my_model_test.rb -n test_invalid_with_bad_attributes

4
Це не працює для мене (на функціональних або одиничних тестах). Я отримую 0 tests, 0 assertions, 0 failures, 0 errors. Рейки 3.0.7.
B Сім

10
Я особисто прихильник форми регулярних виразів: -n "/good/". Втеча з оболонки - це завжди цікаво, тому я схильний дотримуватися простих регулярних виразів, але це набагато простіше, ніж весь час виписувати повне ім'я тесту.
Groxx

4
Важливо зауважити, що для цього ви повинні знаходитись не в каталозі MAIN, як зазначено у відповіді, а у підкаталозі, який містить test/папку. Наприклад, якщо я хочу запустити тест, activesupport/test/core_ext/array_ext_test.rbя повинен бути activesupport/першим.
Вінсент Б.

3
@Groxx - нарешті рішення! Дякую! -n "/good/"працювали.
B Сім

Будьте уважні, виконуючи це у 2018 році + Він обходить деякі завдання тестування, вбудовані в рейки (наприклад, db: test: priprema), які використовуються для багатьох речей, як, наприклад, заміна локальних даних для даних кріплення та відновлення їх знову. Запуск цього вибухнув мою локальну базу даних. Розглянемо рішення, яке використовує вбудовані завдання тестування рейок, як-от stackoverflow.com/a/47006811/1154642 (який працював для мене).
bryanbraun

99

Запустіть тестовий файл :

rake test TEST=tests/functional/accounts_test.rb

Запустіть єдиний тест у тестовому файлі:

rake test TEST=tests/functional/accounts_test.rb TESTOPTS="-n /paid accounts/"

(З коментаря @Puhlze.)


10
Крім того, якщо ви хочете запустити єдиний тест в даному файлі, ви можете додати var середовища середовища TESTOPTS, який буде переданий тесту. Тест на граблі EG TEST = тести / функціональні / account_test.rb TESTOPTS = "- n / оплачені рахунки /"
Puhlze

1
якщо остання команда тестування не працює, спробуйте rake test TEST=tests/functional/accounts_test.rb TESTOPTS="-n '/paid accounts/'"(додаючи /paid accounts/одинарні лапки)
rrw


38

Для рейок 5:

rails test test/models/my_model.rb

9
Але це запускає всі тестові випадки у файлі, питання запитує запустити єдиний тест ...
user000001

Ви можете запустити єдиний тест, додавши номер рядка до імені файлу:bin/rails test test/models/user_test.rb:27
Segfault

29

Завдяки @James відповідь виглядає так:

rails test test/models/my_model.rb:22

Припустимо, що 22 - номер рядка даного тесту. Відповідно до рейок допомагають:

 $ rails test --help

Ви можете запустити один тест, додавши номер рядка до імені файлу:

    bin/rails test test/models/user_test.rb:27

Також зауважте, що ваш тест повинен успадкувати ActionDispatch :: IntegrationTest, щоб це працювало (це була моя помилка):

class NexApiTest < ActionDispatch::IntegrationTest
.
.
.

4
Це здається найкращою відповіддю на основі посібників Rails, принаймні для тестування певної лінії.
tfantina

12

У рейках 5,

Я використовував цей спосіб для запуску одного тестового файлу (усі тести в одному файлі)

rails test -n /TopicsControllerTest/ -v

дивіться тут https://stackoverflow.com/a/41183694/3626659


1
це найкраща відповідь на питання щодо останніх версій рейок, +1
user000001

5

Щоб виконати єдиний тест у фактичному наборі Rails:

bundle exec ruby -I"railties/test" actionpack/test/template/form_options_helper_test.rb

3

Це було моє дурне опівночі. Рейки люб'язно друкує команду, яку вона виконує rake test. Решта - вправа з вирізанням та вставкою.

~/projects/rails/actionpack (my2.3.4)$ ruby -I"lib:test" "/usr/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake/rake_test_loader.rb" "test/controller/base_test.rb"


2

Якщо ви хочете запустити один тест, ви можете просто запустити їх як звичайний сценарій Ruby

ruby actionmailer/test/mail_layout_test.rb

Ви також можете запустити цілий пакет (наприклад, ActiveRecord або ActionMailer), cdввівши в каталог і запустивши rake testвсередину.


1
Не в Rails - принаймні, не з створеними тестовими файлами за замовчуванням. У першому рядку вони "вимагають" test_helper ", але шлях навантаження не буде встановлений вчасно. Якщо ви зміните кожен перший рядок на явну вимогу ("вимагати File.join (File.dirname ( FILE )," .. ',' test_helper ') "), ваше рішення працює.
Джеймс А. Росен

ага, цеrequire File.join(File.dirname(__FILE__), '..', 'test_helper')
Джеймс А. Росен

@Gaius Перевірено. По-перше, це не працює, але cdвходить в дію. Щоб було зрозуміло (я не впевнений, чи я неправильно читаю це, але ви сказали "створені тестові файли"), це для самої бібліотеки Rails, а не для проекту Rails.
Aupajo

2

У моїй ситуації для rakeроботи лише TESTOPTS="-n='/sample/'":

bundle exec rake test TEST=test/system/example_test.rb TESTOPTS="-n='/sample/'"

0

Спочатку перейдіть до папки lib, яку ви хочете протестувати (це важливо), а потім запустіть:

~/Projects/rails/actionview (master)$ ruby -I test test/template/number_helper_test.rb 

0

Папка Rails

  bundle install
  bundle exec ruby -I"activerecord/test" activerecord/test/cases/relation/where_test.rb 

Зверніть увагу, що вам потрібно завантажити відповідну папку: "activerecord / test" (там, де у вас є тест)

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.