Как сделать так, чтобы видеомагнитофон не перезаписывал erb на кассетах

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

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

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


person Ziggy    schedule 17.06.2011    source источник


Ответы (1)


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

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

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

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

person Myron Marston    schedule 23.06.2011