玩笑mongoose.startSession()抛出错误

时间:2020-08-20 06:51:36

标签: mongodb unit-testing mongoose jestjs

我在post方法中实现了交易。一切都很好。但是现在我必须为该方法更新单元测试用例。我尝试模拟startSession()startTransaction()来检查toHaveBeenCalled。但是在运行测试用例时,我像MongooseError: Connection 0 was disconnected when calling startSession``。我是新手,所以我不知道该怎么嘲笑?。

方法:

  static post = (funcCall: Promise<Document>) => async (response: Response, fields?: string[]) => {
    const session = await startSession();
    session.startTransaction();
    try {
      const dbResponse = await funcCall; // model.save(request.body)
      // commit the changes if everything was successful
      await session.commitTransaction();
      success(pick(dbResponse, fields ? fields : ['_id']), 201)(response);
    } catch (error) {
      // this will rollback any changes made in the database
      await session.abortTransaction();
      throwError(error);
    } finally {
      // ending the session
      session.endSession();
    }
  };

我的测试用例:

it('should perform post when valid parameters is passed.', async () => {
  // Preparing
  const mockSaveReturn = {
    _id: objectID,
    test_name: 'sample',
  };
   jest.spyOn(mongoose, 'startSession')
  const spySave = jest.spyOn(modelPrototype.prototype, 'save').mockReturnValueOnce(mockSaveReturn);
  const document = new modelPrototype(mockSaveReturn);
  // Executing
  await post(document.save())(response as Response);
  expect(response.send).toHaveBeenCalledWith({ _id: '54759eb3c090d83494e2d804' });
  expect(spySave).toHaveBeenCalled();
  // Cleaning
  spySave.mockClear();
});

0 个答案:

没有答案