Jest mock mongoose.startSession() throws error

Viewed 727

i'm implemented transaction in the post method. it was work fine. But now I have to update unit test case for that method. I tried to mock startSession() and startTransaction() to check toHaveBeenCalled.But while running test case i got like MongooseError: Connection 0 was disconnected when calling startSession``. I am new to that so i don't know how to mock that?.

Method:

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

My Test case:

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 Answers
Related