I am trying to write unit tests for an application where a lot of code changes is not possible. Almost all the .php files in the code base uses some $_SERVER[”] variables like
require_once $_SERVER['DOCUMENT_ROOT'] . '/mainApi.php';
So now when I have to write and run PHPUnit test cases I have to somehow set these variables.
At present I am setting these variables in the user environment and then doing
$_SERVER['DOCUMENT_ROOT'] = getenv('DOCUMENT_ROOT');
require_once $_SERVER['DOCUMENT_ROOT'] . '/mainApi.php';
Getting the server variables like this is working fine. I run my tests through commandline as $ phpunit test.php.
Ques1: Is it possible to set the $_SERVER variables while running the phpunit tests through commandline?
I also have to run these unit tests through Jenkins and I am not able to set these server variable through ANT/build file.
Ques2: Is it possible to set these variable through ant build file in Jenkins or by running any shell script before executing the phpunit tests through Jenkins?
I tried exporting the server variable through a shell script
export DOCUMENT_ROOT=/server/path-to-root-dir
and calling that script in the build.xml in Jenkins
<export name="setEnv" description="set server var">
<exec executable="sh">
<arg value = "sumit.sh" />
</exec>
</target>
but its not working. Is there any setting that I can do for this?
Thanks!
I’m not sure about #1, but PHPUnit itself would have to support it. I don’t see any way to do that via the command line. However, if you put your current workaround into
bootstrap.phpyou don’t have to do it in each test.For #2,
<exec>allows you to set environment variables using nested<env>elements. I use this in Jenkins.Update: You typically create
bootstrap.phpto setup add the source directory to the include path and initialize the test environment however you need. This file isn’t supplied by PHPUnit–unlikephpunit.xml.I place it in the same directory as
phpunit.xml, but that’s because I have a separate file for each project. It goes in the directory that holds your tests typically. This allows you to runphpunitfrom the command-line without telling it how to find those configuration files. Otherwise you have to use--bootstrapand/or--configurationto point to them.Here is how I structure a typical project: