我想编写一个测试,针对给定的HTTP请求命中一个给定的Express控制器端点。或者说,经过身份验证的请求会通过每个中间件并点击控制器。
我实际上并不关心控制器,实际上控制器价格昂贵,所以我宁愿不运行它。
说出类似的话:
UsersController.jsmodule.exports = {
get: function(req, res) {
// Simplified for example purposes. Assume this does something complex.
res.status(200).json({id: "user123"});
}
}
然后我有一个路由器:
var router;
module.exports = router = new express.Router();
router.get('/users/:id', isAuthenticated, isAdmin, logRequest, UsersController.get);
我想在测试中写下这样的东西:
controllerStub = sinon.stub(UsersController, 'get', function(req, res) {
res.status(418).json(message: "I'm a teapot");
});
request.get('http://localhost:port/users/user123', function(err, response, body) {
response.statusCode.should.equal(418);
controllerStub.callCount.should.equal(1);
});
不幸的是,我认为Express修改函数指针的方式是使用Sinon来控制控制器实际上并不影响Express调用的函数。
我有什么方法可以达到"进入Express路由器并获取/替换/存根运行路由?