Running Acceptance Tests on PHP Projects With Codeception and PhantomJS
Last updated:I'll be using composer to install the tools I'll use for this short tutorial. If you haven't started using it yet, you'll have to sooner or later so why not do it now? It'll be good for you, I promise. You'll be more productive and make more money.
This is the bare minimum you should have in composer.json
:
{
"require": {
"codeception/codeception":"*"
}
}
After you've run php composer.phar install
in the directory composer.json
lives, you can start writing tests.
Bootstraping: creating test directories
From the current directory, locate directory vendor/bin/
(vendor/
is the directory where composer keeps downloaded dependencies; it should be on the same level as composer.json
) and run codecept bootstrap
to create needed files:
Note: (replace /path/to/vendor/bin
with your own values).
$ /path/to/vendor/bin/codecept bootstrap
This will create codeception.yml
and directory tests/
.
Download and start PhantomJS
Go to this link and download PhantomJS for your platform. Extract the file and locate directory bin/
. Once you find it, start phantomjs
like this:
phantomjs/bin$ phantomjs --webdriver=4444
PhantomJS is launching GhostDriver...
[INFO - 2014-04-16T18:08:37.104Z] GhostDriver - Main - running on port 4444
If close this console/terminal it'll stop running!
Setting up a browser emulator to run your tests
Edit file acceptance.suite.yml
:
class_name: WebGuy
modules:
enabled:
- Selenium2
- WebHelper
config:
Selenium2:
url: 'http://your-app-name'
browser: phantomjs
capabilities:
webStorageEnabled: true
Your first actual test
Run the generator:
$ path/to/vendor/bin/codecept generate:cept acceptance Welcome
Add this to file
tests/acceptance/WelcomeCept.php
:<?php $I = new WebGuy($scenario); $I->wantTo('run my first test'); $I->amOnPage('/'); $I->see('some text'); /* replace this with your own text */
Running your test
cd
to the directory wherecodeception.yml
lives.From this directory, locate directory
vendor/bin/
(vendor/
is the directory where composer keeps downloaded dependencies; it should be on the same level ascomposer.json
) and runcodecept run
to run your tests. If all goes well, you should see something like this:Codeception PHP Testing Framework v1.8.5 Powered by PHPUnit 3.7.34 by Sebastian Bergmann. Unit Tests (0) ------------------------------ --------------------------------------------- Acceptance Tests (1) ------------------------ Trying to run my first test (WelcomeCept.php) Ok --------------------------------------------- Functional Tests (0) ------------------------ --------------------------------------------- Time: 4.97 seconds, Memory: 4.75Mb