开玩笑无法检查toHavebeenCalleddocument.save

问题描述

在这里,我正在尝试为restPassword更新单元测试用例。在这方法中,我以post()方法传递有效的文档和响应。我已经模拟了post并试图在运行此测试用例时检查expect(spyPost).toHaveBeenCalledWith(document.save()),但是由于no of calls: 0,测试用例失败了。

有人能建议我这个测试用例有什么问题吗?

enter image description here

重置密码:

  resetSendPasscode = async (request: Request,response: Response,entityType: EntityType): Promise<void> => {
    tryCatch(async () => {
      // query parameter validation
      if (!request.query.email) {
        throwError(e.invalidQueryParameters);
      }

      let model,emailKey,passwordResetKey;
      if (entityType === EntityType.User) {
        model = this.usermodel;
        emailKey = 'user_email';
        passwordResetKey = 'user_password_reset';
      } else {
        model = this.vendorModel;
        emailKey = 'vendor_email';
        passwordResetKey = 'vendor_password_reset';
      }

      // db validation
      const document = await model.findOne({ [emailKey]: request.query.email },false);
      if (!document) {
        throwError(e.notFound);
      }

      const changeRequest = (document as any)[passwordResetKey];

      // check if password request is made more than 3 attempts within 24 hours
      if (
        changeRequest &&
        changeRequest?.attempts >= 3 &&
        changeRequest.last_attempt_date &&
        this.passwordResetUtility.timeDiff(changeRequest.last_attempt_date as Date).getHours() <= 24
      ) {
        throwError(e.notAcceptable);
      }

      // create password reset token
      const reset = this.passwordResetUtility.createResetToken(changeRequest);

      // update datebase
      (document as any)[passwordResetKey] = reset;
      return post((document as Document).save())(response,[`${passwordResetKey}.status`]);
    })(response);
  };

发布方式:

  static post = (funcCall: Promise<Document>) => async (response: Response,fields?: string[]) => {
    try {
      const dbResponse = await funcCall;
      success(pick(dbResponse,fields ? ['_id',...fields] : ['_id']),201)(response);
    } catch (error) {
      throwError(error);
    }
  };

单元测试用例:

    it('should call controller utility post method and pass promise of document save method.',async () => {
      // Preparing
      const request: Partial<Request> = {
        query: {
          email: 'user@1234.com',},};
      const date = new Date('2020-07-08T10:34:15.239Z');
      const mockFindOneReturn = {
        _id: '5f0076b7bd530928fc0c0285',user_no: 'USR00005',user_full_name: 'user',user_email: 'user@1234.com',user_password: '$2b$10$kGJrsrOmMqfwUYh25a0g.O/SDoD9GA0AF69iYlvysSlbTplAh8YBW',user_phone: '0123456785',user_visits: 1,user_permission_groups: ['5f0073c8bd530928fc0c0280'],user_created_date: '2020-07-08T10:34:15.239Z',user_status_is_active: true,user_password_reset: {
          password_reset_status_is_active: true,key: 1234,status: 'pending',attempts: 0,last_attempt_date: null,password_reset_created_date: date,password_reset_modified_date: '2020-07-08T10:34:15.239Z',};

      const documents = {
        user_status_is_active: true,user_visits: 0,user_permission_groups: ['5f0073bcbd530928fc0c027f'],_id: '5f85229f30329929af2d78d4',user_full_name: 'sudharsan',user_email: 'sudhar922@gmail.com',user_phone: '9047060000',user_modified_date: '2020-10-13T06:17:56.456Z',user_no: 'USR00014',key: 7314,};
      const spyFindOne = jest.spyOn(usermodel.getModel(),'findOne').mockReturnValueOnce(mockFindOneReturn as any);
 
      const spyPost = jest.spyOn(ControllerUtility,'post').mockImplementation(() => async () => {});
      const testModel = container.resolve(usermodel);
      const modelPrototype = testModel.getModel();
      const document = new modelPrototype(documents);
      // Verifying
      await userController.resetSendPasscode(request as Request,response as Response);
      expect(spyFindOne).toHaveBeenCalledWith({ user_email: 'user@1234.com' },false);
      expect(spyPost).toHaveBeenCalledWith(document.save());
    });

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...