There are many resources on how to run tests in PhantomJS, but none on testing Applications written in PhantomJS itself. Non-Trivial Applications such as Data Mining Web Crawlers or Web Page Automation Tools for example.
Conceptually I find it helps to think of PhantomJS as having a server-side and a client-side. The client-side is what happens over in a remote page (inside calls to WebPage.evaluate etc) and the server side is everything else.
This project is concerned with how you test the so-called server side of a PhantomJS Application.
npm install phantomjs-test-starter
git clone firstname.lastname@example.org:JamieMason/phantomjs-test-starter.gitcd phantomjs-test-starternpm install
Local dependencies are installed by
npm install but you will also need
$ phantomjs (of course) and
npm install -g grunt-cli.
grunt test will run the tests and generate a coverage report at ./spec/build/reports/index.html.
By optional convention, tests are located at ./spec/unit/ at the same relative path as the file being tested.
For example, tests for the following files:
Would be located at:
Adding new tests
All test files added to ./spec/unit/unit.runner.js will run, (I hope to generate this file to avoid this manual step).
Modified Jasmine 1.3.1
A slightly modified version of jasmine-standalone-1.3.1 is needed as that does not run in PhantomJS (outside of a page.evaluate that is, which is not relevant to our use case).
The core Jasmine library is identical, only how it's exposed has been modified.
They've been left unignored for this example so can see what gets generated during tests, but in a real application you will want to ignore: