Ruby on Rails: выполнение тестов - PullRequest
8 голосов
/ 26 марта 2009

Когда я хочу запустить все свои юнит-тесты, я запускаю рейк-тест: юниты. Чтобы запустить все мои функциональные тесты, я запускаю rake test: functionals. Если я хочу запустить все тестовые случаи в одном файле, я запускаю

ruby ​​test / unit / username_test.rb

Несколько человек говорили мне, что вместо этого я должен запустить рейк, например

тест рейка: единицы измерения TEST = test / unit / username_test.rb

Для запуска тестов говорят, что я всегда должен запускать грабли. Я знаю, что должен запустить rake, если я тестирую все свои юнит-тесты. Но что, если я проверяю только один файл или один конкретный метод тестирования в файле? Должен ли я по-прежнему использовать грабли? Есть ли разница между этими двумя? Получу ли я какую-либо выгоду от запуска рейка над рубином? Есть ли какой-нибудь недостаток в запуске ruby, а не rake?

Ответы [ 5 ]

7 голосов
/ 26 марта 2009

К сожалению, эти два не то же самое. Запуск тестов под Rake может привести к извлечению вещей из разных мест, чем при непосредственном запуске теста (больше проблем, когда в вашей системе несколько версий гемов и т. Д.).

Цель состоит в том, чтобы тесты, запускаемые под Rake, находились в среде, которая соответствует тому, что производят рельсы; Я не могу засвидетельствовать, насколько близко они совпадают, но я видел тесты, которые проходили при непосредственном запуске, но не проходили при прохождении через грабли или рельсы (и наоборот).

3 голосов
/ 26 марта 2009

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

Простой ruby ​​кажется идеальным для быстрого тестирования отдельных файлов во время итераций.

Имейте в виду, что выполнение всего через rake может привести к разным результатам для запуска всего по отдельности, как я недавно обнаружил в замешательстве - я делал что-то немного не так в одном тесте, который успешно работал в изоляции, но оставлял проблему на время последующий тест, который обнаружился только при использовании граблей.

2 голосов
/ 26 марта 2009

Нет, я так не думаю. Rake, кажется, является удобным способом запуска всех тестов, всех модульных тестов или всех функциональных / контроллеров. Для одного файла я использую ruby object_test.rb подход .. короче и отлично работает для моего домашнего проекта rails.

0 голосов
/ 13 января 2012

Два не совпадают. Rake выполнит предварительную тестовую загрузку.

Намерение состоит в том, что тесты, запускаемые под Rake, должны проводиться в среде, которая соответствует тому, что произведет рельсы;

Одно отличие, которое я заметил, заключается в том, что с помощью rake происходит загрузка некоторых устройств, которую можно обойти с помощью ruby.

Я бы рекомендовал использовать rake, если только вы не используете командную строку ruby ​​для одного-единственного теста в файле с параметром -n.

0 голосов
/ 11 апреля 2011

Они должны быть идентичны. если нет, то вы определенно делаете что-то не так.

Как я уже говорил в моих других комментариях, если вы получаете тесты, которые проходят в одном, но не проходят в другом, вы делаете что-то очень неправильное; это указывает на плохую настройку теста и обычно вызывается разным порядком выполнения теста между двумя подходами к тестированию; один из которых приводит к сбою тестов.

Обычно причиной этого является то, что вы не используете транзакции и / или тесты не убирают за собой. Например, не требуется надлежащим образом проверять приборы, которые они позже проверяют, и вместо этого полагаться на уже существующее состояние базы данных.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...