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 thecasperjs 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.