Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Testing for specific properties of rejected promises, with Mocha and Chai-as-Promised

I am trying to test the specifics of a rejected Promise, using Chai-as-Promised, Mocha, and the "should" dialect. Promises are implemented by bluebird.

This works fine:

it('it should be rejected when given bad credentials', function () {

   var promiseOfUsers = db.auth("bad", "credentials").getUsers();
   return promiseOfUsers.should.eventually.be.rejectedWith(Error)

});

There is a "status" property on that error. I would like to assert that status is 401

This does not work:

it('it should be rejected when given bad credentials', function () {

   var promiseOfUsers = db.auth("bad", "credentials").getUsers();
   return promiseOfUsers.should.eventually.be.rejectedWith(Error)
       .that.has.property('status')
       .that.equals(401)

});

It seems that any attempt to assert without referencing "rejected" or rejectedWith(Error), fails and just prints the error out to the console.

How can I delve into the reason for the rejection?

like image 347
toddgeist Avatar asked Jun 02 '14 00:06

toddgeist


2 Answers

I think rejectedWith() handler has some issues. But you can do like this:

promiseOfUsers.should.be.rejected.and.eventually.have.property("status",401)

like image 120
sertug Avatar answered Nov 12 '22 09:11

sertug


If you want to check if your promised was rejected and check the resulting object (aka the reason):

return fooPromise.should.be.rejected.and.eventually.deep.equal({
   'x': 1,
   'y': 1,
   'z': 2
})

You can change deep.equal to the any of the usual other chai matchers.

Note: This is an extension of @sertug's answer and hopefully will be useful for others coming here who looking for this.

like image 44
James Lawson Avatar answered Nov 12 '22 09:11

James Lawson