Search code examples
javascriptnode.jspromisees6-promisechai

Unit Test failing promise


I am new to asynchronous programming. I am writing a test case for the following example code.

someAsync(text) {
  try {
    //do something and resolve result
    return Promise.resolve(result);
  } catch (err) {
    return Promise.reject(new Error(`Failure ${err}`));
  }
}

I am testing it with the following code:

it('should throw error when called', (done) => {
  const mymodule = new MyModule(args);
  mymodule.someAsync('something that causes failure').catch((err) => {
    expect(err).to.exist;
    expect(err.message).to.contains('This should pass');
    done(err);
  });
});

This test case fails, assertions pass and then after done again it throws error. Please tell me where am I going wrong?


Solution

  • done(err) makes a spec to fail. Since it's expected error, it shouldn't fail a spec, it should be done() instead.

    Mocha doesn't need done to handle promises, a promise can be returned from a spec.

    It likely should be:

    it('should throw error when called', () => {
      const mymodule = new MyModule(args);
      return mymodule.someAsync('something that causes failure').catch((err) => {
        expect(err).to.exist;
        expect(err.message).to.contain('This should pass');
      });
    });
    

    Also, it's not evident from the listed code that expect(err.message).to.contain('This should pass') assertion is true.