- Install PHPUnit
- Install Selenium
- Configure IDEA/PhpStorm
- Configure WebTestCase
- Work around a PHP Warning issue with PHPUnit and Selenium
- Run the the tests
- Additional resources
The article will most likely also be applicable for PhpStorm, since these two products share the same foundation (IDEA uses the same code for PHP support as PhpStorm has in its core). It should at most be a matter of slightly different menu items and stuff.
We assume that you have the following:
- PEAR installed, which is used to install PHPUnit
- Java installed, which is used to run the
.jarfile for Selenium
- Created a Yii application (normally using the command
yiic webapp ...). Note: In the examples below this app is in the folder
/Users/rawtaz/Sites/yii/testin the filesystem, and the URL to it is
- Have created a project for that Yii application in your IDE, be it IntelliJ IDEA or PhpStorm
Install PHPUnit ¶
This part will first upgrade PEAR so that it has the latest resources, then configure it so that the PEAR channels are discovered automatically, and finally install PHPUnit and its Selenium support.
Run the following commands in your Terminal (use Spotlight to find the Terminal application in case you haven't used it before):
% sudo pear upgrade PEAR % sudo pear config-set auto_discover 1 % sudo pear install pear.phpunit.de/PHPUnit % sudo pear install pear.phpunit.de/PHPUnit_Selenium
Install Selenium ¶
Next we need to install the actual Selenium Server. Download the "Selenium Server"
.jar file, e.g.
selenium-server-standalone-2.25.0.jar, from the Selenium download page. Save the file wherever it makes sense to you; It is an application file that you will run directly.
Once the file is downloaded, start the Selenium Server by running the following commands in your terminal:
Note: For the sake of example, we assume that the file's name is
selenium-server-standalone-2.25.0.jar and that it was saved in the folder
~/jar – change these details as appropriate.
% cd ~/jar % java -jar selenium-server-standalone-2.25.0.jar
Selenium should now start and run in this Terminal window. The output should look like the following:
% java -jar selenium-server-standalone-2.25.0.jar 2012-sep-02 14:58:17 org.openqa.grid.selenium.GridLauncher main INFO: Launching a standalone server 14:58:19.373 INFO - Java: Apple Inc. 20.8-b03-424 14:58:19.375 INFO - OS: Mac OS X 10.6.8 x86_64 14:58:19.384 INFO - v2.25.0, with Core v2.25.0. Built from revision 17482 14:58:19.527 INFO - RemoteWebDriver instances should connect to: http://127.94.0.1:4444/wd/hub 14:58:19.528 INFO - Version Jetty/5.1.x 14:58:19.529 INFO - Started HttpContext[/selenium-server/driver,/selenium-server/driver] 14:58:19.530 INFO - Started HttpContext[/selenium-server,/selenium-server] 14:58:19.531 INFO - Started HttpContext[/,/] 14:58:19.593 INFO - Started org.openqa.jetty.jetty.servlet.ServletHandler@13f6ba0f 14:58:19.593 INFO - Started HttpContext[/wd,/wd] 14:58:19.601 INFO - Started SocketListener on 0.0.0.0:4444 14:58:19.602 INFO - Started org.openqa.jetty.jetty.Server@65faba46
Configure IDEA/PhpStorm ¶
Note: These instructions might differ slightly if you are using PhpStorm, but in general it's the same.
Assuming that your project in IDEA/PhpStorm only knows about the Yii application's files, we need to add the Yii Framework files and PHPUnit's files to the so called "include path". The purpose of this is to make IDEA/PhpStorm aware of methods and properties on the various classes from Yii and PHPUnit, so that it can provide code completion and inspection for you.
[Preferences] -> Project Settings -> PHP -> Include path and click the
+ button to add the following two items to the
Include path list:
- The path to the Yii framework folder, for example
~/Sites/yii/yii/framework(this can of course be skipped if you already did this or you have added the Yii framework files as a Content Root in a module)
- The path to the PHPUnit folder, for example
*Note: Both of the filesystem paths above might very well be different on your system - you'll have to figure out where PHPUnit was installed and where you have the Yii Framework files (the folder named
Configure WebTestCase ¶
We need to make an initial configuration of the class that is used for functional testing, so that it knows which URL to open using Selenium.
Open the file
protected/tests/WebTestCase.php in your Yii projec and edit the
TEST_BASE_URL constant so that it points to the URL of the index-test.php file in your Yii project
In this example my URL is
http://localhost/~rawtaz/yii/test/index-test.php/, so I changed the constant like this:
Work around a PHP Warning issue with PHPUnit and Selenium ¶
A summary of this problem is in the Yii Forum thread at http://www.yiiframework.com/forum/index.php/topic/30511-firefoxphp-faild-to-include-in-yiibase/. There will most likely be a fix for this on the future, but for now we work around the problem like suggested in the aforementioned forum thread.
- Open the same file as in the previous step, the
protected/tests/WebTestCase.phpin your Yii project
$this->setBrowser('*firefox');as the last thing in the
- Open the file
protected/tests/phpunit.xmlin your Yii project
- Comment out all the
<browser .../>tags you can find inside the
Selenium will now use Firefox for the testing.
Run the the tests ¶
Finally, we try to run the default test for your Yii application (we assume it is still the default one generated by
yiic webapp ...), to see that they work:
Run the following commands in a new Terminal window:
% cd ~/Sites/yii/test/protected/tests % phpunit functional/SiteTest.php
Note: In the example above, the path to the project is
~/Sites/yii/test, but yours might be different – adjust accordingly.
What you should see is something like this:
% phpunit functional/SiteTest.php PHPUnit 3.6.12 by Sebastian Bergmann. Configuration read from /Users/rawtaz/Sites/yii/test/protected/tests/phpunit.xml ... Time: 23 seconds, Memory: 5.50Mb OK (3 tests, 12 assertions) %
The three dots in the fourth line of text in the above output means that three tests passed. If one of them had failed there would have been an 'F' instead of a dot for that test.