Пишу про разработку вообще и в частности про: JavaScript, HTML5, CSS3, AngularJS, ReactJS, Agile.

Тестируем NodeJS

Тесты писать важно и нужно. А все потому что мы разрешаем программистам копаться в коде и писать свои функции. Потом приходят другие программисты и опять начинают писать код, после нескольких итераций там уже черт ногу сломать может. Поэтому нужно всех сразу приучать к хорошему.

Причем под NodeJS вроде несовсем понятно как это и делать, а проблема в том как мы пишем код:

Этот код ни разу не протестировать, потому что мы не можем просто создать файл с тестами, импортировать туда productsController.js и поверять что возвращает метод fetchProducts. А все потому что он тесно связан с базой данных myDB, эту связь для тестов нужно разорвать, заменив базу данных на временный объект.

Теперь вопрос в том как это сделать. Можно обернуть все функции контроллера в класс и передавать в него зависимости, но это выглядит достаточно грамоздко, в добавок переписывать сущестующую кодовую базу может быть накладно.

Можно пойти другим путем – заменять контекст. Стандартный пакет vm имеет метод runInNewContext(), который как раз этим и занимается. В итоге нам потребуется вот такая вспомогательная функция для загрузки контроллера, который нужно протестировать:

И все что остается – это использовать ее в самом тесте:

Ссылки по теме:

Поделиться:
comments powered by Disqus