Acceptance Testing With PhantomJS and CasperJS

Home » Blog » Software » Front End Development » Acceptance Testing With PhantomJS and CasperJS

PhantomJS is a headless WebKit browser that allows you to call, test and scrape websites from the command line. In the developer’s own words:

PhantomJS is a headless WebKit with JavaScript API. It has fast and native support for various web standards: DOM handling, CSS selector, JSON, Canvas, and SVG.

CasperJS is a testing and scripting framework that builds on PhantomJS. Again, in the developer’s own words:

CasperJS is an open source navigation scripting & testing utility written in Javascript and based on PhantomJS — the scriptable headless WebKit engine. It eases the process of defining a full navigation scenario and provides useful high-level functions, methods & syntactic sugar for doing common tasks such as:

  • defining & ordering browsing navigation steps
  • filling & submitting forms
  • clicking & following links

In the past few weeks I’ve been using CasperJS for implementing automated acceptance tests for two web apps – one implemented with Apache Wicket and a Rails app – and CasperJS tests have proven to be a useful addition to unit and integration tests. By providing a JavaScript API for defining navigation scenarios it allows you test a web app just the way the user would see it. As CasperJS is a headless WebKit it can be run from the command line and hence can be integrated in continuous integration processes.

CasperJS makes implementing acceptance tests a breeze, which makes it a great tool for complementing your test suite. I’d even go as far as saying that for web applications acceptance tests can work as a replacement for traditional unit tests since they more accurately define the behaviour of an application.

Edit: I just found this article by Codeship.io about testing with CasperJS, which has some nice CasperJS code examples.

9 Comments
  1. Pingback: BromBone – Headless Browser As A ServiceBjörn Wilmsmann | Björn Wilmsmann

Leave a Comment

*

I agree