【发布时间】:2016-11-27 05:15:58
【问题描述】:
我有一个自定义模块 tokens.js,它具有通过 npm 请求模块 发出请求的功能。它看起来像这样:
'use strict';
let request = require('request');
module.exports.getToken = function(code, cb) {
let url = 'some_url';
request(url, function (err, response, body) {
if (err) {
return cb(err);
} else if (response.statusCode !== 200) {
return cb('err');
}
parseGetResponse(body, function (err, token) {
if (err) {
return cb(err);
}
return cb(null, token);
});
});
我想编写单元测试来覆盖getToken()函数,但是我在模拟请求模块时遇到了一些麻烦。
我试过这个:
let mocha = require('mocha');
let rewire = require('rewire');
let should = require('should');
let requestMock = {
request: function (url, cb) {
// return cb(); etc
}
}
let tokens = rewire('services/tokens.js');
tokens.__set__('request', requestMock);
但是这种方法行不通:
TypeError: request is not a function
at Object.module.exports.getToken (services/tokens.js)
其实,这又引出了另一个问题: 如果不直接调用导出函数(request.request(url, cb)),请求模块如何工作?我应该如何使用 rewire?
【问题讨论】:
标签: node.js unit-testing request mocking