要测试的代码
import { User } from '../models/no-sql/user';
function userCreate(req) {
const user = new User({
username: req.username,
password: req.password
});
return user.save();
}
app.get('/userCreate', function(req, res) {
User.findOne({ username: req.username }).lean().exec((err, data) => {
if(data){
userCreate(req).then(function() {
// success
}, function(err) {
// error
});
}else{
// no user found
}
});
});
单元测试
require('sinon-as-promised');
import request from 'supertest';
const user = {
username: newUserName,
password: 'password'
};
factory.build('user', user, function(err, userDocument) {
UserMock.
expects('findOne').withArgs(sinon.match.any)
.chain('lean')
.chain('exec')
.yields( null, undefined);
const docMock = sinon.mock(userDocument);
docMock.expects('save')
.resolves([]);
request(app)
.post('/userCreate')
.send({username: newUserName, password: 'password')
.expect(200)
.end((err, res) => {
if(err) done(err);
should.not.exist(err);
should.equal(res.body.success, true);
done();
});
});
测试到达返回 user.save() 然后超时。似乎我在单元测试中遗漏了一些东西,但是没有引发错误。我正在使用 sinon-as-promised 来解决 promise ,但它似乎没有看到它。
最佳答案
为了简洁起见,您似乎不太可能故意在示例代码中省略 res.send() 调用。
只是为了确保,当路由器中调用的 userCreate 函数成功时,您是否返回 200 状态码?
userCreate(req).then(function() {
// success
res.status(200).send('User created successfully');
}
关于mongodb - 返回 Mongoose promise 的单元测试函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37632204/