public method

Runs tests given a path to a directory or file containing tests. The path to the test(s) may be absolute or relative to the current working directory.

li3 test lithium/tests/cases/core/ObjectTest.php
li3 test lithium/tests/cases/core

If you are in the working directory of an application or plugin and wish to run all tests, simply execute the following:

li3 test tests/cases

If you are in the working directory of an application and wish to run a plugin, execute one of the following:

li3 test libraries/<plugin>/tests/cases
li3 test <plugin>/tests/cases

This will run <library>/tests/cases/<package>/<class>Test.php:

li3 test <library>/<package>/<class>.php


  • string $path

    Absolute or relative path to tests or a file which corresponding test should be run.



Will (indirectly) exit with status 1 if one or more tests failed otherwise with 0.


	public function run($path = null) {
		if (!$path = $this->_path($path)) {
			return false;
		if (!preg_match('/(tests|Test\.php)/', $path)) {
			if (!$path = Unit::get($path)) {
				$this->error('Cannot map path to test path.');
				return static::EXIT_NO_TEST;
		$handlers = $this->_handlers;

		if (!isset($handlers[$this->format]) || !is_callable($handlers[$this->format])) {
			$this->error(sprintf('No handler for format `%s`... ', $this->format));
			return false;
		$filters = $this->filters ? array_map('trim', explode(',', $this->filters)) : array();
		$params = compact('filters') + array('format' => $this->format);
		$runner = function($options = array()) use ($path, $params) {
			return Dispatcher::run($path, $params + $options);
		$report = $handlers[$this->format]($runner, $path);
		$stats = $report->stats();
		return $stats['success'];