1.1.rst 2.79 KB

Upgrading to 1.1

The most visible change is the way you write tests. With 1.0, you were able to access a .test property from any casper script and so running a suite using the standard casperjs executable:

// 1.0 style test script not using the `casperjs test` subcommand
var casper = require('casper').create();

casper.start('http://foo.bar/', function() {
    this.test.assert(true);
});

casper.run(function() {
    this.test.done(1);
    this.test.renderResults(true);
});

In 1.1, the test framework has been heavily refactored to decouple the tester from a casper instance as much as possible, so it's no more possible to run a test suite right from the standard casperjs command as you would have done with the script shown above.

Instead you now have to use the :doc:`casperjs test <../testing>` subcommand mandatorily to access a tester instance from the casper.test property.

Warning

As of 1.1:

  • you shouldn't invoke the renderResults() method directly anymore
  • you shouldn't use the done() first argument to set planned test as it's been deprecated
  • you can't access the casper.test property when not using the casperjs test subcommand

If you try, you'll get an error:

// test.js
var casper = require('casper').create();
casper.test.assert(true);

Will give:

$ casperjs test.js
CasperError: casper.test property is only available using the `casperjs test` command

The new Tester#begin() method

However, a new :ref:`begin() <tester_begin>` method as been added to the :ref:`Tester <tester_module>` prototype, to ease describing your tests:

casper.test.begin('Description of my test', 1, function(test) {
    test.assert(true);
    test.done();
});

More asynchronously:

casper.test.begin('Description of my test', 1, function(test) {
    casper.start('http://foo.bar/', function() {
        test.assert(true);
    });

    casper.run(function() {
        test.done();
    });
});

Note

Please note that begin()'s the second argument which is now the place to set the number of planned tests.

require() in custom modules

CasperJS 1.1 now internally uses PhantomJS' native require() function, but it has side effect if you write your own casperjs modules; in any casperjs module, you now have to use the new global patchRequire() function first:

// casperjs module code
var require = patchRequire(require);
// now you can require casperjs builtins
var utils = require('utils');
exports = {
    // ...
};

Note

You don't have to use patchRequire() in a standard casperjs script.