phantomjs-test-starter

1.0.0 • Public • Published

phantomjs-test-starter

A boilerplate / starter template for testing PhantomJS ‘Applications’ with Jasmine, Grunt and Istanbul.

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.

Installation

NPM

npm install phantomjs-test-starter

Git

git clone git@github.com:JamieMason/phantomjs-test-starter.git
cd phantomjs-test-starter
npm install

Global dependencies

Local dependencies are installed by npm install but you will also need $ phantomjs (of course) and npm install -g grunt-cli.

Running tests

Running grunt test will run the tests and generate a coverage report at ./spec/build/reports/index.html.

Writing tests

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:

  • ./src/modules/network/ajax.js
  • ./src/modules/events.js
  • ./src/modules/data/local-storage.js

Would be located at:

  • ./spec/unit/modules/network/ajax.test.js
  • ./spec/unit/modules/events.test.js
  • ./spec/unit/modules/data/local-storage.test.js

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

This is due to a perfectly reasonable assumption that any JavaScript environment will have either module.exports or window and not both — which is the case in PhantomJS.

The core Jasmine library is identical, only how it's exposed has been modified.

.gitignore

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:

  • coverage-reporter.json
  • spec/build

Contributing

Please fork and pull request or raise an issue if you can help improve this resource in any way.

Package Sidebar

Install

npm i phantomjs-test-starter

Weekly Downloads

0

Version

1.0.0

License

none

Last publish

Collaborators

  • fold_left