我正在尝试使用mocha和chai编写单元测试,我面临的主要问题是,对于每个API,我必须专门定义url,即
test.js
var expect = require('chai').expect;
var should = require('chai').should;
var express = require('express');
var chai = require('chai');
var chaiHttp = require('chai-http');
chai.use(chaiHttp);
var baseUrl = 'http://localhost:3000/api';
describe("Test case for getting all the users", function(){
it("Running test", function(done){
this.timeout(10000); //to check if the API is taking too much time to return the response.
var url = baseUrl + '/v1/users?access_token=fd085c73227b94fb3d1d5552b5a62be963b6d068'
chai.request(url)
.get('')
.end(function(err, res) {
//console.log('routes>>>>', routes);
expect(err).to.be.null;
expect(res.statusCode).to.equal(200); // <= Call done to signal callback end
expect(res).to.have.property('text');
done();
});
});
});
我希望我的所有路由都应该直接从我的 routes.js 文件中调用,而不是对每个网址进行硬编码,是否可能? TIA。
答案 0 :(得分:0)
您可以为路由器对象创建init函数以填充路由。将init函数用于测试和实际代码。这是一个例子:
//
// initRouter.js
//
function initRouter(router){
router.route('/posts')
.post(function(req, res) {
console.log('req.body:', req.body)
//Api code
});
router.route('/posts/:post_id')
.get(function(req, res) {
console.log('req.body:', req.body)
//Api code
})
return router;
}
module.exports = initRouter;
//
// in the consumer code
//
var initer = require('./initRouter');
app.use('/api', initer(express.Router()));
答案 1 :(得分:0)
在您演示的示例中,您正在测试通过某些IP和PORT公开的现有Web服务器。使用express-mocks-http,您可以模拟表达请求和响应对象,并将它们直接传递给您定义的路由功能。有关详细信息,请参阅包文档。