Node.js Sinon存根.resolves()未按要求运行
以下是我正在编写测试的函数:Node.js Sinon存根.resolves()未按要求运行,node.js,unit-testing,sinon,Node.js,Unit Testing,Sinon,以下是我正在编写测试的函数: ensureUserDoesNotExist(request, response, next) { this.User.findOne({ where: { email: request.body.email }}) .then(user => { if (user) { response.sendStatus(403); } else { next(); } });
ensureUserDoesNotExist(request, response, next) {
this.User.findOne({ where: { email: request.body.email }})
.then(user => {
if (user) {
response.sendStatus(403);
} else {
next();
}
});
}
以下是我无法通过的测试:
it('should return a 403 if a matching user is found', () => {
mockRequest.body.email = 'test@email.com';
userController.User.findOne.resolves(true); // This is a previously created sinon stub
userController.ensureUserDoesNotExist(mockRequest, mockResponse, mockNext);
assert(mockResponse.sendStatus.calledWith(403));
});
它失败了,只是声称没有调用存根(不管它值多少钱)
我强烈怀疑这与承诺有关——或者说与西农的互动有关——但在试图弄清楚到底是什么的过程中,我的头脑一片空白。代码按预期的方式工作(或者在我玩它之前最后一次查看时)。有人能帮我吗?您的断言在结束请求之前进行评估 你需要回报你的承诺
ensureUserDoesNotExist(request, response, next) {
return this.User.findOne({ where: { email: request.body.email }})
.then(user => {
if (user) {
response.sendStatus(403);
} else {
next();
}
});
}
然后在子句中断言
it('should return a 403 if a matching user is found', () => {
mockRequest.body.email = 'test@email.com';
userController.User.findOne.resolves(true); // This is a previously created sinon stub
userController.ensureUserDoesNotExist(mockRequest, mockResponse, mockNext).then(() => {
assert(mockResponse.sendStatus.calledWith(403));
});
});
在结束请求之前评估您的断言
你需要回报你的承诺
ensureUserDoesNotExist(request, response, next) {
return this.User.findOne({ where: { email: request.body.email }})
.then(user => {
if (user) {
response.sendStatus(403);
} else {
next();
}
});
}
然后在子句中断言
it('should return a 403 if a matching user is found', () => {
mockRequest.body.email = 'test@email.com';
userController.User.findOne.resolves(true); // This is a previously created sinon stub
userController.ensureUserDoesNotExist(mockRequest, mockResponse, mockNext).then(() => {
assert(mockResponse.sendStatus.calledWith(403));
});
});
测试还必须向Mocha返回一个表示异步测试的承诺。您可以使用然后调用返回的值:
it('should return a 403 if a matching user is found', () => {
mockRequest.body.email = 'test@email.com';
userController.User.findOne.resolves(true); // This is a previously created sinon stub
return userController.ensureUserDoesNotExist(mockRequest, mockResponse, mockNext).then(() => {
assert(mockResponse.sendStatus.calledWith(403));
});
});
测试还必须向Mocha返回一个表示异步测试的承诺。您可以使用然后调用返回的值:
it('should return a 403 if a matching user is found', () => {
mockRequest.body.email = 'test@email.com';
userController.User.findOne.resolves(true); // This is a previously created sinon stub
return userController.ensureUserDoesNotExist(mockRequest, mockResponse, mockNext).then(() => {
assert(mockResponse.sendStatus.calledWith(403));
});
});