问题描述
var request = require('request');
module.exports.getRequest = function (url,headers) {
return new Promise((resolve,reject) => {
request(
{
url: url,method: "GET",timeout: 30000,headers: headers,},function (error,response,body) {
if (error) {
reject(error);
}
resolve({response,body});
}
);
});
};
我想为它写一个测试用例。但我不能写。 有人可以帮忙吗? 我试过这样的事情。
var proxyquire = require('proxyquire'),assert = require('assert'),pathStub = {};
describe('Test',() => {
it('1',() => {
var foo = proxyquire('./foo',{'request': pathStub});
pathStub.request = function (file,option) {
console.log("Request Stub");
option(null,"a","b");
};
let b = foo.getRequest('file.txt');
assert.strictEqual(foo.getRequest('file.txt'),'EXTERMINATE,EXTERMINATE THE FILE.TXT');
});
});
错误 - (node:15344) UnhandledPromiseRejectionWarning: TypeError: request is not a function
解决方法
您没有正确存根 request
函数。
例如
foo.js
:
var request = require('request');
module.exports.getRequest = function (url,headers) {
return new Promise((resolve,reject) => {
request(
{
url: url,method: 'GET',timeout: 30000,headers: headers,},function (error,response,body) {
if (error) {
reject(error);
}
resolve({ response,body });
},);
});
};
foo.test.js
:
var proxyquire = require('proxyquire'),assert = require('assert');
describe('Test',() => {
it('1',async () => {
const requestStub = function (option,callback) {
console.log('Request Stub');
callback(null,'a','b');
};
var foo = proxyquire('./foo',{ request: requestStub });
var actual = await foo.getRequest('file.txt');
assert.deepStrictEqual(actual,{ response: 'a',body: 'b' });
});
});
单元测试结果:
Test
Request Stub
✓ 1 (1378ms)
1 passing (1s)
----------|---------|----------|---------|---------|-------------------
File | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s
----------|---------|----------|---------|---------|-------------------
All files | 85.71 | 50 | 100 | 85.71 |
foo.js | 85.71 | 50 | 100 | 85.71 | 14
----------|---------|----------|---------|---------|-------------------