【发布时间】:2020-08-13 15:55:14
【问题描述】:
我正在学习 express 和 sinon(很难:))。我想对以下代码进行单元测试:
// ./routers/root.js
var express = require('express');
var router = express.Router();
router
.route('/')
.get(function(req, res) {
res.writeHead(200, {'Content-Type': 'application/json'});
res.write(JSON.stringify({Application: "NodeTours", Version: "2.0.0", Host: host, Port: port}));
res.end();
});
module.exports = router;
我一直在尝试不同的事情,但没有成功。我回到基本的例子。我意识到这似乎是一个完整的新手问题,但我一无所知。这是最新的尝试:
// ./test/test.js
var sinon = require('sinon')
var expect = require('chai').expect
describe('Routers', function() {
context('/', function() {
var rootRouter = require('../routers/root')
var res = {Application: "NodeTours", Version: "2.0.0", Host: 'host', Port: 'port'};
it('should call / router', function() {
rootRouter.route('/').get(null, res);
// TODO: expect...
})
})
})
它失败了:
Routers
/
1) should call / router
0 passing (4ms)
1 failing
1) Routers
/
should call / router:
Error: Route.get() requires a callback function but got a [object Null]
at Route.<computed> [as get] (node_modules/express/lib/router/route.js:202:15)
at Context.<anonymous> (test/test.js:10:29)
at processImmediate (internal/timers.js:456:21)
我尝试了多个教程,但均未成功。我将不胜感激任何有关如何对我的代码进行单元测试的指针。或者如何调整我的代码以便单元测试更容易/可能。
用于上下文和参考的主应用 server.js 文件(已删除与此问题无关的代码)
// ./server.js
// npm pacakages
var express = require('express');
var bodyParser = require('body-parser');
// app imports
var { rootRouter } = require('./routers');
// other cut out
//globals
app = express();
app.use(bodyParser.json());
app.use('/', rootRouter);
// other cut out
// Set up Mongo DB connection
// code to st up db connection
// Start server (only if connection to DB established)
var server = MongoClient(url, { useUnifiedTopology: true, poolSize: 10 }).connect().then(client => {
const dbo = client.db(dbName);
// some init code cut out
// make connection available
app.locals.dbo = dbo;
// start server
app = app.listen(process.env.PORT || 7777, function () {
host = require('os').hostname();
port = "7777";
logger.verbose("Startup: NodeTours listening at http://%s:%s", host, port)
});
}).catch(error => {
logger.error("Startup: Couldn't connect to the DB. The app will exit")
logger.error(" Error: " + error)
process.exit();
}
);
【问题讨论】:
-
Idk 但如果您想轻松测试您的网络服务器,您可以使用包supertest 来模拟服务器并轻松发送请求并验证响应。
-
@MickaelB。我已经成功使用了 supertest,但我相信这将被归类为集成测试,而不是单元测试。
-
是的,你是对的
标签: node.js unit-testing express sinon