Итак, вы только что создали новый генератор Йомен, отлично! Но как вы можете быть уверены, что файлы, которые вы создаете, заполнены правильными значениями в нужном месте?

Я обнаружил, что при утверждении определенного значения в сгенерированном файле с использованием существующих методов результирующая ошибка в основном говорила: «где-то в этом файле есть ошибка» — не особенно полезно, когда этот файл представляет собой чванливый документ длиной в несколько сотен строк с большим количеством переменных. происходит замена!

Чтобы решить мою проблему, я изначально написал функцию внутри тестов генератора, которая делала бы следующее:

  • Сравните сгенерированный файл во время тестирования и статический файл, который я создал в каталоге 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() два параметра:

  1. Первый параметр - это путь к сгенерированному файлу.
  2. Второй параметр — это путь к файлу снимка.
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.