Как остановить VCR от перезаписи erb в кассетах - PullRequest
4 голосов
/ 18 июня 2011

Недавно мы начали использовать Видеомагнитофон , чтобы заглушить запросы в наших тестах на огурец.Мы используем таблицы огурцов для описания различных видов запросов и храним их как переменные с помощью gherkin.Наши файлы кассет были переработаны, чтобы включить erb, чтобы мы могли подставить значения для запроса, который мы хотим протестировать.

Проблема в том, что всякий раз, когда появляется новый запрос, видеомагнитофон записывает новые запросы, а также перезаписывает (удаляет) весь erb из кассеты, заменяя его запросом, интерполированным для этого примера.Каждый раз, когда мы запускаем запросы, где значение изменилось (скажем, значение метки времени, которое мы получаем от API, с которым мы разговариваем), весь erb должен быть скопирован обратно в файл кассеты.Это расстраивает, так как тесты запускаются постоянно.

Кто-нибудь знает, почему видеомагнитофон удаляет erb при записи новых ответов?Есть идеи об обходном пути?Есть ли способ сохранить обратно шаблон до его интерполяции?

1 Ответ

4 голосов
/ 23 июня 2011

Автоматическое объединение ваших ручных изменений в кассету с недавно записанной кассетой - сложная проблема, которую, на мой взгляд, лучше всего оставить инструментам, специально разработанным для обработки истории текстовых документов и управления их объединением (т. Е. Вашего источника). система контроля). ERB делает это еще сложнее: хотя вы можете просто использовать ERB для интерполяции переменных, можно использовать любой допустимый ruby. Там могут быть циклы, условия и многое другое в ERB. Видеомагнитофон не может автоматически объединить этот материал.

Пара предложений:

  • Используйте ваши кассеты более детально, чтобы они не перезаписывались часто. Я склонен использовать кассету для каждого HTTP-запроса или логической группы HTTP-запросов.
  • Используйте режим записи :once (последнее значение по умолчанию), чтобы предотвратить перезапись существующих кассет.
  • Взгляните на функцию фильтрации конфиденциальных данных видеомагнитофона. Это гораздо менее гибко, чем ERB (то есть вы не можете использовать циклы, условные выражения или произвольный код ruby), но для простой интерполяции переменных это работает действительно, очень хорошо. Вместо того, чтобы использовать ERB, он использует строку-заполнитель - вы можете использовать строку, например, <PASSWORD>, чтобы заменить пароль, например. Видеомагнитофон автоматически позаботится о вставке текста-заполнителя при записи кассеты и замене его на правильное действительное значение при воспроизведении.
  • Если это не соответствует вашим потребностям, хуки before_record и before_playback должны дать вам всю необходимую мощность для автоматической интерполяции (или даже вставки фрагмента ERB) при записи кассеты. Это в основном, как работает фильтрация - см. здесь .

Я, безусловно, открыт для идей, как улучшить видеомагнитофон, если эти вещи не соответствуют вашим потребностям.

...