В Yii2 функциональные тесты работают немного иначе, чем юнит-тесты. Когда вы выполняете запрос с помощью `$I->amOnRoute()`, это вызывает перенаправление, и в результате это не оставляет информацию о коде ответа, который вы хотите проверить.
Когда вы вызываете `$I->amOnRoute('user/crud/index');`, ваше приложение обрабатывает запрос, а затем выполняет редирект, поэтому дальнейшие проверки кода ответа, такие как `seeResponseCodeIs(302)`, не срабатывают, потому что вы уже перешли на новую страницу.
Для проверки кода ответа на редирект в функциональных тестах вы можете использовать запрос через `sendGET()` или `sendPOST()` вместо `amOnRoute()`, чтобы получить прямой ответ от сервера без перенаправления. Например:
```php
public function guestListUsersTest(FunctionalTester $I)
{
$I->sendGET('user/crud/index');
// Проверяем, что редирект происходит (302)
$I->seeResponseCodeIs(302);
// Проверяем, что мы редиректим на страницу логина
$I->seeHeadersContains(['Location' => '/site/login']);
}
```
В данном коде:
1. Используется `sendGET()` для отправки запроса к нужному маршруту.
2. Затем `seeResponseCodeIs(302)` проверяет, что ответом действительно является код 302.
3. `seeHeadersContains()` используется, чтобы проверить, что в заголовках ответа есть заголовок `Location`, указывающий на страницу логина.
Таким образом, вы сможете проверить код ответа и заголовки, избегая проблем с редиректами, которые могут возникать при использовании методов `amOnRoute()`.