Итак, вы только что создали новый генератор Йомен, отлично! Но как вы можете быть уверены, что файлы, которые вы создаете, заполнены правильными значениями в нужном месте?
Я обнаружил, что при утверждении определенного значения в сгенерированном файле с использованием существующих методов результирующая ошибка в основном говорила: «где-то в этом файле есть ошибка» — не особенно полезно, когда этот файл представляет собой чванливый документ длиной в несколько сотен строк с большим количеством переменных. происходит замена!
Чтобы решить мою проблему, я изначально написал функцию внутри тестов генератора, которая делала бы следующее:
- Сравните сгенерированный файл во время тестирования и статический файл, который я создал в каталоге
snapshots
. - Определите, какая строка не совпадает между двумя файлами
- Выдать ошибку, уведомляющую меня, где именно в моем сгенерированном файле не складываются вещи.
Я пишу несколько генераторов Yeoman, поэтому хотел создать модуль npm, чтобы можно было повторно использовать этот удобный фрагмент кода. Этот модуль называется @j154004/yeoman-assert
, и теперь он доступен на npm и исходный код на Github.
Использование @j154004/yoman-assert
Вам нужно будет настроить тестовую среду для тестирования вашего генератора в первую очередь, если вы вообще застряли, в репозитории исходного кода есть пример.
Установите пакет в свой проект:
npm install --save-dev @j154004/yeoman-assert
Теперь импортируйте модуль в свои тесты:
const assert = require('@j154004/yeoman-assert');
const path = require('path');
Мы включаем path
, так как это нужно, чтобы сообщить функции утверждения моментального снимка, где хранятся наши моментальные снимки.
Теперь внутри тестового примера передайте assert.snapshotContent()
два параметра:
- Первый параметр - это путь к сгенерированному файлу.
- Второй параметр — это путь к файлу снимка.
it('has generated "swagger.yaml" with correct values", () => {
assert.snapshotContent(
'public/swagger.yaml',
path.join(__dirname, 'snapshots', 'swagger.yaml')
)
});
Чего ожидать при запуске тестов
Если ваш сгенерированный файл и файл моментального снимка совпадают, отлично, тестовый пример пройден.
Однако, если что-то не совсем работает с вашим генератором, вы увидите, что тестовый пример завершится ошибкой, которая выглядит примерно так:
AssertionError [ERR_ASSERTION]: Contents of swagger.yaml:123 does not match snapshot + expected - actual -path -path:
AssertionError
сообщает вам, в каком именно файле произошла ошибка, а в конце имени файла добавляется номер строки. Затем отображается сравнение, позволяющее визуально проверить, что не соответствует файлу моментального снимка.
Сейчас я планирую включить @j154004/yeoman-assert в другие тесты генератора Yeoman, чтобы помочь мне писать более качественные тесты, которые легче отлаживать, когда что-то идет не так.
Если вы используете модуль и чувствуете, что функциональность может быть улучшена, не стесняйтесь создавать задачу в Github.