node.js - 通过将路由器逻辑分离到自己的控制器中来对路由器逻辑进行单元测试
问题描述
我有一个这样的路由处理程序:app.use('/authorization', authorization);
它的路由器处理程序定义为
router.get('/', (req, res, next) {
handleResponse(err, response, data) {
// ...
}
sessionService.getSession(req, res, req,query.code, handleResponse);
});
我正在努力寻找一种对此进行单元测试的方法,作为我的第一个解决方案,我考虑将所有业务逻辑删除到一个单独的控制器中,以便可以独立于路由器对其进行测试。
这是我的控制器的示例实现:
module.exports = class AuthorizationController {
constructor(req, res, next) {
this.req = req;
this.res = res;
this.next = next;
}
handleResponse(err, response, data) {
// do things with this.req, this.res and this.next
}
};
在我的路由器上,我一直这样称呼它:
router.get('/', (req, res, next) {
sessionService.getSession(req, res, req,query.code, (new AuthorizationController(req, res, next)).handleResponse);
});
控制器已成功初始化(在其构造期间),但方法this
内部的引用一旦被调用。handleResponse
undefined
这是将我的方法与路由器分开的正确方法吗?如果是这样,有没有办法初始化req, res and next
我的控制器的属性,以便它们在类的生命周期内持续存在?
this
未定义大概是因为创建类的位置与handleResponse
调用方法的位置。
解决方案
推荐阅读
- javascript - 使用正交相机时 GLTF 对象的纹理消失
- heroku - 在 Heroku 中使用 Ncat 进行代理身份验证
- xcode - SwfitUI 2.0 Xcode 12 如何更新核心数据实体的单个属性
- google-drive-api - 更新时未保留 Google doc 文件样式
- mysql - 有没有一种快速的方法来使用 MySQL 更新一个 json 列数据?
- vb.net - 在 AutoCAD 运行期间编辑 Program Files 目录中的 Settings.txt 文档
- linux - PATH 变量中带有冒号的目录
- python - 根据条件将值从一个数据帧分配给另一个数据帧
- python - 输入字段后单击 Selenium href
- python-3.x - (unicode 错误)“unicodeescape”编解码器无法解码位置 2-3 中的字节: