Как правило, вы хотели бы включить «черный ящик» в обработку HTTP, чтобы как можно меньше модулей вашего приложения заботились о деталях HTTP.
В исходной папке вы должны иметьодин модуль (например, commonhttp.js
).Вы хотите, чтобы это экспортировало ваши функции HTTP, и другие модули в вашем приложении используют их следующим образом:
const commonhttp = require('./commonhttp');
commonhttp.doRequest( ... ).then( ... );
Другие модули, такие как todos.js
, и различные другие модули, будут экспортировать свои собственные функции, используя этот модульНапример:
const commonhttp = require('./commonhttp');
const todos = {
getTodos( ... ) {
return commonhttp.doRequest( ... );
},
createTodo( ... ) {
return commonhttp.doRequest( ... );
},
// etc.
};
module.exports = todos;
Для ваших модульных тестов, когда вы тестируете модуль todos.js
, вы хотите смоделировать любые вызовы к модулю commonhttp
;для этого вы можете использовать простой mocha + Sinon и следить за методом doRequest.По сути, все, что вы тестируете, это «когда я вызываю getTodos, я ожидаю, что он вызовет doRequest с этими аргументами».Вы будете следовать этому шаблону для всех модулей в вашем приложении, которые используют doRequest.
Вы также, конечно, хотите проверить модуль commonhttp
- , в спецификации которого находится Nockможет пригодиться.Это не является строго необходимым, вы также можете «заблокировать» модуль http, но вам нужно настроить множество сложных шпионов, чтобы имитировать поведение http;вместо этого написание спецификации (с использованием Nock), которая говорит: «Хорошо, я вызываю doRequest с этими параметрами, которые должны были сделать этот HTTP-вызов», имеет смысл.