【发布时间】:2021-05-23 10:01:08
【问题描述】:
我正在尝试为我的 Express 控制器功能之一编写单元测试,但是 sinon 调用不会等待控制器功能完成。我是否需要将控制器函数编写为 async 以便在测试中等待?
it('should allow creating', function (done) {
const req = {
body: {
name: 'something here',
isPrivate: 'true',
},
flash: sinon.spy(),
user: { _id: mongoose.Types.ObjectId() }
};
const res = {
redirect: sinon.spy()
}
leagueController.create(req, res);
req.flash.calledWith('success', 'League created').should.be.true;
res.redirect.calledWith('/leagues').should.be.true;
League.findOne({ name: 'something here' }, (err, league) => {
should.exist(league);
done();
});
});
这是一个简化的控制器功能:
function create(req, res) {
const { name, isPrivate } = req.body;
let newLeague = new League({
name: name,
isPrivate: isPrivate,
});
newLeague.save(function (err) {
if (err) {
req.flash('error', err.message || err);
debug(err.message);
return res.redirect('/leagues/new');
}
req.flash('success', 'League created');
debug('league created');
return res.redirect('/leagues');
});
}
【问题讨论】:
-
我需要把控制器函数写成异步的,这样我才能在测试中等待 - 是的
-
您是否尝试过制作您通过测试
async的功能? -
你需要显示控制器的代码。请创建一个最小的、可重现的示例
标签: node.js express mongoose sinon sinon-chai