Я столкнулся с прелюбопытнейшей особенностью Codeception в режиме functional.
Описать ее можно таким образом.
Первое: у нас есть простейший контроллер
class TestController extends Controller
{
public function actionIndex()
{
return $this->renderPartial('test');
}
}
Внутри шаблона test:
<?php
function test() { }
А теперь возвращаемся к functional testing.
Делаем простейшую проверку:
public function checkTest(\FunctionalTester $I)
{
$I->amOnRoute('test/index');
$I->amOnRoute('test/index');
//На второй строчке скрипт упадет
}
Я почему-то считал, что скрипт делает запросы на сервер, а оказывается срабатывает своеобразный чит - фреймворк, по сути, делает внутренний вызов actionIndex() дважды подряд, будто бы эмулируя HTTP-вызов и если внутри шаблона существует какая-то функция - она вызовет ошибку, так как мы переопределяем ее во второй раз. То есть, в этом случае фреймворк не ведет себя как "рожден, чтобы умирать" каждый раз после вызова action, а будет несколько раз запускать разные action для ускорения процесса, и если в глобальной видимости определить функцию - она будет ложить проверки?
P. S. Оставим в стороне, что использовать функцию в шаблоне - быдлокод, это чисто пример более запутанного и хитрого хака. Я потратил на его выяснение часа 3, и это будет мне ценным уроком меньше делать грязного кода