jasminepromisewhen-js

Idiomatically testing when.js promises with Jasmine


I'm writing some Jasmine unit tests for code that returns when.js promises. I keep finding myself writing code like this:

doMyThing().then(function(x) {
  expect(x).toEqual(42);
  done();
}).otherwise(function() {
  expect(true).toBe(false);
  done();
});

The only way to catch the exception is with the otherwise() function (it's an older version of when.js), and then there doesn't seem to be a Jasmine (2.0) function to say "failure detected" - hence the kludgy "expect(true).toBe(false)".

Is there a more idiomatic way of doing this?


Solution

  • After looking a bit more closely at the documentation and realising that we're using Jasmine 2.3, I see we can make use of the fail() function, which massively simplifies things. The example in the question becomes:

    doMyThing().then(function(x) {
      expect(x).toEqual(42);
    }).otherwise(fail).then(done);
    

    If doMyThing() throws an exception, that Error gets passed to fail() which prints a stack trace.

    This .otherwise(fail).then(done); turns out to be a pretty convenient idiom.