如何使用 Mocha 和 Chai Express 路由进行测试
How to test with Mocha and Chai express route
我正在开发 Express 应用程序,该应用程序会过滤一些数据来呈现视图。
我目前的路线是:
router.get('/user/name/:name', (req, res) => {
return serverUtil.getUserByName(req.params.name).then(success =>{
res.render('partials/users/user', {user: success});
}).catch(err =>{
res.render('partials/users/user', {error: err});
});
});
正如您在上面看到的,我正在发送 res.render 但我不知道如何测试它。
我的摩卡测试目前是这样的:
it('Should post to user/name/:name', function(done){
chai.request('http://localhost:5050')
.get('/user/name/Britney')
.end((err, res) => {
console.log("res ", res.body); // empty
exp(res).to.be.a('object');
done();
});
});
但是如果我改变路线:
router.get('/user/name/:name', (req, res) => {
return serverUtil.getUserByName(req.params.name).then(success =>{
res.send({user: success}); //Change this
}).catch(err =>{
res.render('partials/users/user', {error: err});
});
});
测试按预期工作,但应用程序不工作。
那么如何使用 res.render 和我传递的数据测试路由?
终于找到问题了
首先需要为此使用 cheerio。因此,在 .end()
回调的 res
参数中,我在 res.text
中得到了 HTML。我在 res.body 处查找错误,代码将是:
it('Should post to user/name/:name', function(done){
chai.request('http://localhost:5050')
.get('/user/name/Britney')
.end((err, res) => {
res.should.have.status(200);
exp(res).to.be.a('object');
let $ = cheerio.load(res.text);
let textid = $('#textid').val(); //the id of my id field
exp(textid).to.have.equal('a0ece5db-cd14-4f21-812f-966633e7be86'); //true
done();
});
});
我正在开发 Express 应用程序,该应用程序会过滤一些数据来呈现视图。
我目前的路线是:
router.get('/user/name/:name', (req, res) => {
return serverUtil.getUserByName(req.params.name).then(success =>{
res.render('partials/users/user', {user: success});
}).catch(err =>{
res.render('partials/users/user', {error: err});
});
});
正如您在上面看到的,我正在发送 res.render 但我不知道如何测试它。
我的摩卡测试目前是这样的:
it('Should post to user/name/:name', function(done){
chai.request('http://localhost:5050')
.get('/user/name/Britney')
.end((err, res) => {
console.log("res ", res.body); // empty
exp(res).to.be.a('object');
done();
});
});
但是如果我改变路线:
router.get('/user/name/:name', (req, res) => {
return serverUtil.getUserByName(req.params.name).then(success =>{
res.send({user: success}); //Change this
}).catch(err =>{
res.render('partials/users/user', {error: err});
});
});
测试按预期工作,但应用程序不工作。
那么如何使用 res.render 和我传递的数据测试路由?
终于找到问题了
首先需要为此使用 cheerio。因此,在 .end()
回调的 res
参数中,我在 res.text
中得到了 HTML。我在 res.body 处查找错误,代码将是:
it('Should post to user/name/:name', function(done){
chai.request('http://localhost:5050')
.get('/user/name/Britney')
.end((err, res) => {
res.should.have.status(200);
exp(res).to.be.a('object');
let $ = cheerio.load(res.text);
let textid = $('#textid').val(); //the id of my id field
exp(textid).to.have.equal('a0ece5db-cd14-4f21-812f-966633e7be86'); //true
done();
});
});