代码之家  ›  专栏  ›  技术社区  ›  user1381745

Sinon存根。resolves()未按要求运行

  •  0
  • user1381745  · 技术社区  · 6 年前

    下面是我正在编写测试的函数:

    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 回复  |  直到 6 年前
        1
  •  2
  •   Troopers    6 年前

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

    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));
      });
    });
    
        2
  •  0
  •   sripberger    6 年前

    测试还必须向Mocha返回一个承诺,以指示异步测试。您可以使用 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
      return userController.ensureUserDoesNotExist(mockRequest, mockResponse, mockNext).then(() => {
          assert(mockResponse.sendStatus.calledWith(403));
      });
    });