Search code examples
javascriptunit-testingqunit

How do I extend QUnit with new assertion functions?


I'd like to add new assertions to QUnit. I've done something this:

QUnit.extend(QUnit.assert, {
  increases: function(measure, block, message){
    var before = measure();
    block();
    var after = measure();
    var passes = before < after;
    QUnit.push(passes, after, "< " + before, message);
  }
});

When I use increases(foo,bar,baz) in my test, I get

ReferenceError: increases is not defined

From the browser console I can see increases is found in QUnit.assert along with all the other standard functions: ok, equal, deepEqual, etc.

From the console, running:
test("foo", function(){console.log(ok) });
I see the source of ok.

Running:
test("foo", function(){console.log(increases) });
I am told increases is not defined.

What is the magic required to use my increases in a test? Also, where (if anywhere) is the documentation for that?

Thanks


Solution

  • I have found the solution is to accept a parameter in the test callback function. That parameter will have the extra assertion type. So we can call it like so:

    //the assert parameter accepted by the callback will contain the 'increases' assertion
    test("adding 1 increases a number", function(assert){
        var number = 42;
        function measure(){return number;}
        function block(){number += 1;}
        assert.increases(measure, block);
    });