Search code examples
node.jsunit-testingsequelize.jssinon-chai

how to handle catch in sinon, unit testing nodejs


in my UserService:

createUser: async (data) => {
    const user = new UserDBEntryMapper(data);
    const createdUser = await UserModel.create(user).catch(error => {
      this.handleError(error);
    });
    return createdUser ? new UserBOMapper(createdUser) : null;
  }

in my user.test.js

it.only('Create New User', async () => {
    const stub = sinon.stub(UserModel, "create").returns(user);
    const created = await UserService.createUser(user);
    expect(stub.calledOnce).to.be.true;
});

throwing the error as:

Create New User:
TypeError: UserModel.create(...).catch is not a function

If I remove catch block in UserService the test passes, but we need a catch block there. How do I handle this?

Note: UserModel.create() is sequelize default function


Solution

  • Promise needs to be returned in a mock. Something like this

    const stub = sinon.stub(UserModel, "create").returns(Promise.resolve(user));