我在Express中使用promise(使用Q库)测试中间件时遇到了麻烦。
这是一个类似我案例的例子。
var httpMocks = require('node-mocks-http');
test('should return 404 status', function (done) {
var req = httpMocks.createRequest(),
var res = httpMocks.createResponse();
myMiddleware(req, res);
expect(req.statusCode).to.equal(404);
});
让我们说,myMiddleware
拨打另一个模块using promise
来调用next()
上的resolve
或{{1}上的res.status(404).send()
}}
我嘲笑模块用于测试目的。
我怎样才能抓住reject
myMiddleware
的{{1}}结尾,但是没有返回next()?
干杯!
答案 0 :(得分:0)
您将不得不将myMiddleware
更改为返回承诺或进行回调。
你可以这样做:
// myMiddleware now makes callback with potential error
function myMiddleware(req, res, callback) {
async.map(..., function(err, results){
callback(err);
});
}
然后在测试中,您可以等待回调测试值:
test('should return 404 status', function (done) {
var req = httpMocks.createRequest(),
var res = httpMocks.createResponse();
myMiddleware(req, res, function(error) {
if(error) {
// Handle error for tests
}
// Test your values now
expect(req.statusCode).to.equal(404);
// All done
done();
});
});
在此示例中,来自myMiddleware
的回调仅返回错误,因为显然您并不关心其他任何事情。在您的情况下,我们主要只是使用回调作为测试值的触发器。