Верх страницы
Обложка к записи Как тестировать константы
Время для прочтения: 0 мин. 33 сек.

Как тестировать константы

Константы можно протестировать при помощи Function Mocker.

Исходный код:

class Constant {

	public function abspath() {
		return ABSPATH;
	}

}

Для тестирования необходимо немного изменить код. Константы необходимо получать через функцию constant:

class Constant {

	public function abspath() {
		return constant( 'ABSPATH' );
	}

}

Для тестирования используем библиотеку lucatume/function-mocker. Установим ее через composer:

composer require lucatume/function-mocker

В файле bootstrap.php инициализируем FunctionMocker:

use tad\FunctionMocker\FunctionMocker;

require_once 'path/to/vendor/autoload.php';

FunctionMocker::init(
	[
		'whitelist'             => [
			realpath( 'path/to/root/of/the/project/' ),
		],
		'redefinable-internals' => [ 'constant' ],
	]
);

В тестовом классе нужно обновить фикстуры setUp и tearDown, заменить функцию constant и убедиться, что данная функция вызвана правильно:

use tad\FunctionMocker\FunctionMocker;
use PHPUnit\Framework\TestCase;

class Test_Constant extends TestCase {

	public function setUp(): void {
		FunctionMocker::setUp();
		parent::setUp();
	}

	public function tearDown(): void {
		parent::tearDown();
		FunctionMocker::tearDown();
	}

	public function test_abspath() {
		$abspath = '/abspath/';
		$mock_constant = FunctionMocker::replace( 'constant', $abspath );
		$constant = new Constant();

		$this->assertSame( $abspath, $constant->abspath() );

		$mock_constant->wasCalledWithOnce( [ 'ABSPATH' ] );
	}

}

Источник: WP Punk.

Автор: Maksym Denysenko

WordPress жиrock star и автор блога wp-punk.com. Разработчик программного обеспечения в Awesome Motive. Работает над продуктом WPForms.

Комментарии
Подписаться
Уведомить о
guest

0 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии
Предыдущая запись

Давайте дружить
в Телеграме

Авторский блог вашего покорного слуги в Telegram про web, программирование, алгоритмы, инструменты разработчика, WordPress, Joomla, Opencart, Laravel, Moonshine, фильмы и сериалы