Run test and coverage report with ant build in Windows
So, you want to run test and coverage report commands in Windows environment. For example, you want to run kahlan
command for test, then make coverage report by istanbul
and istanbul-merge
.
Based on the ant
documentation on exec part, it noted as follow:
The task delegates to Runtime.exec which in turn apparently calls ::CreateProcess. It is the latter Win32 function that defines the exact semantics of the call. In particular, if you do not put a file extension on the executable, only .EXE files are looked for, not .COM, .CMD or other file types listed in the environment variable PATHEXT. That is only used by the shell.
Note that .bat files cannot in general by executed directly. One normally needs to execute the command shell executable cmd using the /c switch.
If you are familiar with ant command, usually, you can create a build.xml
file as default build configuration. You can create another build file that you can mention it when run the ant
command, eg: build-windows.xml
:
$ ant -buildfile build-windows.xml
Your build-windows.xml
then can use “cmd” as executable
property with /c /path/to/executable-file
as argument. The file will like below:
<?xml version="1.0" encoding="UTF-8"?> <project name="Your Application name" default="build"> <property name="toolsdir" value="${basedir}/vendor/bin/"/> <property name="moduledir" value="${basedir}/module/"/> <target name="build" depends="kahlan,coverage-report" description=""/> <target name="kahlan" description="Run kahlan"> <!-- Application --> <exec executable="cmd" failonerror="true" taskname="kahlan"> <arg line="/c ${toolsdir}kahlan.bat --spec=${moduledir}Application/spec/ --src=${moduledir}Application/src --istanbul=coverage/coverage-application.json "/> </exec> <!-- Application --> <!-- other modules to be tested here --> </target> <target name="coverage-report" description="Run coverage report generation"> <!-- merge coverages for many modules test --> <exec executable="cmd" failonerror="true" taskname="istanbul merge"> <arg line="/c istanbul-merge --out coverage.json coverage/*.json"/> </exec> <!-- make report --> <exec executable="cmd" failonerror="true" taskname="istanbul report"> <arg line="/c istanbul report"/> </exec> </target> </project>
With above, when you run the command, if it succeed, it will likely as follow:
$ ant -buildfile build-windows.xml Buildfile: D:\app\build-windows.xml kahlan: [kahlan] _ _ [kahlan] /\ /\__ _| |__ | | __ _ _ __ [kahlan] / //_/ _` | '_ \| |/ _` | '_ \ [kahlan] / __ \ (_| | | | | | (_| | | | | [kahlan] \/ \/\__,_|_| |_|_|\__,_|_| | | [kahlan] [kahlan] The PHP Test Framework for Freedom, Truth and Justice. [kahlan] [kahlan] src directory : D:\app\module\Application\src [kahlan] spec directory : D:\app\module\Application\spec [kahlan] [kahlan] ...................................................... 11 / 11 (100%) [kahlan] [kahlan] [kahlan] [kahlan] Expectations : 11 Executed [kahlan] Specifications : 0 Pending, 0 Excluded, 0 Skipped [kahlan] [kahlan] Passed 11 of 11 PASS in 1.831 seconds (using 8Mo) [kahlan] [kahlan] Coverage Summary [kahlan] ---------------- [kahlan] [kahlan] Total: 100.00% (25/25) [kahlan] [kahlan] Coverage collected in 0.035 seconds coverage-report: [istanbul report] Done build: BUILD SUCCESSFUL Total time: 4 seconds
That’s it!
References:
leave a comment