【发布时间】:2017-02-17 22:39:15
【问题描述】:
我正在尝试断言在快速中间件中异步抛出的错误:
要测试的中间件:
const request = require('request');
const middleware = function (options) {
if (!options) {
throw new Error('Options are missing.'); // gets catched
}
request(options.uri, (err, response) => {
if(err) {
throw err;
}
});
return function (req, res, next) {}
}
module.exports = middleware;
mocha 测试:
describe('middleware', () => {
describe('if async error is thrown', () => {
it('should return an error', done => {
try {
middleware({
uri: 'http://unkown'
});
} catch (err) {
assert.equal('Error: getaddrinfo ENOTFOUND unkown unkown:80', err.toString());
return done();
}
});
});
})
问题是,err 没有在测试中被捕获:
Uncaught Error: getaddrinfo ENOTFOUND unkown unkown:80
at errnoException (dns.js:27:10)
at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:78:26)
我知道这是因为错误是异步抛出的,但我不知道如何在这里解决它。
【问题讨论】:
-
返回中间件函数之前请求的目的是什么?
-
从 OpenId Connect 配置中获取 jwks URI,稍后在中间件中调用。
-
为什么不使用承诺?本质上在你的中间件函数中,从你的 try-catch 中返回一个 Promise。所以你的catch块会
reject(err) -
@LostJon 你介意提供一个工作样本吗?