Sinon stub.resolves()没有按照需要行事

时间:2018-02-09 20:57:23

标签: 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();
      }
    });
  }

这是我无法通过的测试:

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));
});

它失败了,只是声称没有调用存根(根本不需要它)。

我强烈怀疑这与承诺 - 或者诗乃与它的互动 - 有关 - 但是我在试图弄清楚究竟是什么时有一个完整的空白。代码按预期工作(或者在我玩之前最后一次查看时)。任何人都可以帮助我吗?

2 个答案:

答案 0 :(得分:1)

在结束请求之前评估您的断言 你需要回复承诺

ensureUserDoesNotExist(request, response, next) {
  return this.User.findOne({ where: { email: request.body.email }})
    .then(user => {
      if (user) {
        response.sendStatus(403);
      } else {
        next();
      }
    });
  }

并在then子句

中断言
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));
  });
});

答案 1 :(得分:0)

测试还必须返回一个承诺,指示对Mocha的异步测试。您可以使用#s=df.stack().replace({'[(|)]':' '},regex=True).str.strip().str.split(' ',expand=True) 调用返回的内容:

s=df.stack().str.split('(',expand=True)
s[1]=s[1].replace({'[(|)]':' '},regex=True).str.strip()