Мы, разработчики, часто по умолчанию создаем тестовый файл для каждого файла реализации. Это отнимает много полезных инструментов и опций, которые мы можем использовать для улучшения дизайна наших тестов.
Рассмотрим следующий пример тестирования рабочего процесса создания и проверки подлинности пользователя.
Обратите внимание на использование bcrypt.hash()
в create-user.js
и authenticate-user.test.js
, а также использование bcrypt.compare()
в authenticate-user.js
и create-user.test.js
.
При отдельном тестировании createUser
и authenticateUser
оба теста должны взаимодействовать с bcrypt
. Тест для authenticateUser
должен дублировать логику из createUser
, а тест для createUser
должен дублировать логику из authenticateUser
.
Тестирование на этом уровне полезно для проверки того, что реализация использует bcrypt
правильно, но такое использование, вероятно, скопировано из документации и не подвержено ошибкам.
Рассмотрим немного другой подход.
Дублирование кода между реализацией и тестом было уменьшено. Этот тест менее связан с bcrypt
в качестве детали реализации. Этот тест также лучше отражает то, как createUser
и authenticateUser
следует использовать в другом месте кодовой базы.
Один тестовый файл на файл реализации — предположение по умолчанию, на которое стоит обратить внимание.