javascript - 错误:Route.get() 需要一个回调函数,但得到了一个 [object Object]。用 Chai 测试 router+res.render 函数
问题描述
我的 main.js 看起来像这样:
'use strict';
const express = require( 'express' );
const app = express();
const homeController = require( './controllers/homeController' );
const errorController = require( './controllers/errorController')
console.log("+get homeController");
app.get( '/', homeController );
console.log('+get homeController.showUsers');
app.get( '/users', homeController.showUsers );
在 homeController.js 中有我想用 Chai 测试的 router.get 方法:
/* GET home page. */
router.get('/', function(req, res, next) {
res.render('index', {
title: 'Internship Approval System'
});
});
...
module.exports = router;
我的 router.test.js 文件如下所示:
var sinon = require('sinon');
var chai = require('chai');
var expect = chai.expect;
var router = require('./controllers/homeController');
describe('home route', function() {
it('should return rendered response', function() {
var req = {};
var res = {
render: sinon.spy()
};
return router.get(req, res).then(function() {
expect(res.render.calledOnce).to.be.true;
});
});
});
尝试查看它是否被调用一次时出现错误:
1) home route
should return a rendered response:
Error: Route.get() requires a callback function but got a [object Object]
at Route.<computed> [as get] (node_modules\express\lib\router\route.js:202:15)
at Function.proto.<computed> [as get] (node_modules\express\lib\router\index.js:510:19)
at Context.<anonymous> (router.test.js:15:19)
at processImmediate (internal/timers.js:439:21)
如何app.get( '/', homeController );
在 main 中修改以包含回调函数?
解决方案
homeController.js
/* GET home page. */
router.get('/', function(req, res, next) {
res.render('index', {
title: 'Internship Approval System'
});
});
----
// Add this line in controller
module.exports = router;
main.js
// replace this
app.get( '/', homeController );
// like so
app.use('/', homeController);
推荐阅读
- c++ - 如何使用 WinDBG 检查进程上下文之外的转储,并获得正确的调用堆栈
- python - 在python中的excel中查找和替换单元格
- java - 如何在 Java 中读取 CSV 文件,然后通过 AES 算法加密
- python - 'flask run' 或 'python run' 使用哪个?
- javascript - HTML 文本,为隐藏字段设置相同的值
- java - 从 Java 到 Base64 到 Python 的序列化 BitSet 或布尔数组
- mysql - Mysql优化/性能,如何高效使用limit | 基于位置的选择
- php - Laravel-为 foreach 提供的参数无效
- angular - Angular 结构指令和 Renderer2
- c++ - 我必须构建我的项目 2 次,第一次失败,因为它无法打开库