Upgrading to 1.1

Testing framework refactor

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 casperjs test 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 begin() method as been added to the Tester 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 notice begin()’s 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.

__file__ has been removed

As of 1.1, CasperJS now uses native PhantomJS’ require() function which doesn’t support the __file__ builtin variable within custom modules like 1.0 allowed.

Tester#getFailures() and Tester#getPasses() methods removed

These two methods have been removed from the Tester API.

You can retrieve test failure and success records by simply accessing tester.currentSuite.failures and tester.currentSuite.passes instead.

Step and run completion callbacks don’t throw anymore

Instead, you should listen to the step.error and complete.error events; if you really want to keep raising them:

casper.on("step.error complete.error", function(error) {
  throw error;
});