История до сих пор…
Итак, в части первой мы преобразовали модуль Ancient Fake в класс. Мы обновили тесты и все по-прежнему работало как положено 😎. Итак, что нам делать дальше?
Почему мы вообще снова начали рефакторинг?
Как я упоминал в первой части, иногда некоторые тесты мошеннических модулей давали сбой. Это может быть связано с тем, что некоторые из утверждений не будут выполнены из-за случайного значения, которое будет возникать очень редко. В текущих тестах я повторяю метод модуля 100 раз в большинстве случаев, чтобы убедиться, что все возвращает ожидаемые результаты, но, очевидно, этого было недостаточно 😩!
Что исправить?
Я думал о подходе к утверждениям по-другому. Все, что я хотел проверить, это то, что мы вернули предмет из коллекции. Так почему бы просто не заглушить вызов, если я знаю, что конкретный метод вернет случайное значение. Для этого мне потребуется создать новый модуль фейкера, Faker.Random
.
Реализация
У меня уже было несколько методов для получения элемента из коллекции, поэтому я мог повторно использовать их, чтобы ускорить создание этого нового модуля.
И теперь мы можем добавить это к нашему основному объекту Faker
.
Я также добавил несколько тестов для этого нового мошеннического модуля, так как он находится в общедоступном API!
Теперь это не так, мы можем использовать его для внедрения предсказуемой случайности в наш тест модуля Ancient Fake 😎
Делаем себе инъекции…
Чтобы использовать наш новый модуль Random
faker, нам нужен способ внедрить его в наш класс Ancient
. Итак, сначала нам нужно начать с рефакторинга основного объекта Faker
, который содержит все мошеннические модули. Таким образом, мы можем внедрить его в каждый модуль, который он включает… Возможно, это не очень хорошо объясняется… так что позвольте мне показать вам!
Итак, сначала нам нужно преобразовать объект Faker
в класс.
Мы запускаем тесты… все по-прежнему золото! ✅
Далее нам нужно обновить конструктор модуля Ancient faker.
И если мы проведем тесты… они все равно пройдут! 🙌
Затем мы можем обновить свойство Ancient
в классе Faker
, включив в него себя.
Теперь мы можем использовать другие модули фейкеров в нашем собственном модуле 😎. Итак, давайте внесем несколько изменений…
Вы видите, что теперь мы используем модуль Random
faker для извлечения элемента из коллекции. И мы знаем, что метод element
работает, потому что мы написали для него тесты.
Что дальше?
В третьей части я объясню, как использовать этот новый код при написании тестов, чтобы исключить случайные сбои. Это потребует использования пакетов npm sinon и sinon-test.