Codeception с PhpBrowser, похоже, не следует перенаправлениям

Я впервые настраиваю набор тестов, так что, возможно, я совершаю глупую ошибку.

Я просто настроил Codeception, чтобы написать несколько тестов для проекта CodeIgniter. У меня работает несколько простых тестов (ура!), Но сейчас я пишу приемочный тест, чтобы убедиться, что моя форма входа в систему работает. Заполнение формы и нажатие кнопки «Отправить» работает нормально, но затем, когда я пытаюсь проверить страницу после отправки, оказывается, что перенаправление не выполняется.

  • Содержимое страницы пустое (список узлов пуст, файл журнала равен 0 байтам)
  • URL-адрес страницы - это страница, на которую я отправил, а не страница, на которую я должен быть перенаправлен.

Перенаправление - это перенаправление заголовка 301. Изменить: ЛОЖЬ. Оказывается, используемая мной библиотека аутентификации выполняет перенаправление заголовка Reload. Использование настоящего 301 решает проблему.

Я предполагаю, что за перенаправлениями нужно следить. Есть ли что-то, что мне нужно настроить / настроить для работы 301 редиректа?

Код:

Мой приемочный тест:

<?php
$I = new WebGuy($scenario);
$I->wantTo('Login');
$I->amOnPage('/');
$I->fillField('identity', '[email protected]');
$I->fillField('password', 'password');
$I->click('submit');
$I->see('Logged In Successfully');

Результат, когда я запускаю тест в режиме отладки. Ошибка InvalidArgumentException возникает из-за того, что DOM страницы, на которую он смотрит, пуста:

Codeception PHP Testing Framework v1.7.1
Powered by PHPUnit 3.7.27 by Sebastian Bergmann.

Acceptance Tests (1) -----------------------
Trying to login (LoginCept.php)
Scenario:
* I am on page "/"
* I fill field "identity","[email protected]"
* I fill field "password","password"
* I click "submit"
* I see "Logged In Successfully"
 ERROR

---------------------------------------------


Time: 3.96 seconds, Memory: 9.75Mb

There was 1 error:

---------
1) Failed to login in LoginCept.php
Sorry, I couldn't see "Logged In Successfully":
InvalidArgumentException: The current node list is empty.

Scenario Steps:
5. I see "Logged In Successfully"
4. I click "submit"
3. I fill field "password","password"
2. I fill field "identity","[email protected]"
1. I am on page "/"


  [InvalidArgumentException]

#1  phar:///Users/captbaritone/Projects/codeception/codecept.phar/vendor/symfony/dom-crawler/Symfony/Component/DomCrawler/Crawler.php:494
#2  phar:///Users/captbaritone/Projects/codeception/codecept.phar/vendor/behat/mink-browserkit-driver/src/Behat/Mink/Driver/BrowserKitDriver.php:348
#3  phar:///Users/captbaritone/Projects/codeception/codecept.phar/vendor/behat/mink/src/Behat/Mink/Element/Element.php:101
#4  phar:///Users/captbaritone/Projects/codeception/codecept.phar/src/Codeception/Util/Mink.php:208
#5  phar:///Users/captbaritone/Projects/codeception/codecept.phar/src/Codeception/Util/Mink.php:181
#6  phar:///Users/captbaritone/Projects/codeception/codecept.phar/src/Codeception/Step.php:133
#7  phar:///Users/captbaritone/Projects/codeception/codecept.phar/src/Codeception/TestCase.php:31
#8  phar:///Users/captbaritone/Projects/codeception/codecept.phar/src/Codeception/Scenario.php:87
#9  /Users/captbaritone/Projects/codeception/tests/acceptance/WebGuy.php:571
#10 /Users/captbaritone/Projects/codeception/tests/acceptance/LoginCept.php:8

FAILURES!
Tests: 1, Assertions: 0, Errors: 1.

person Jordan Eldredge    schedule 18.10.2013    source источник
comment
Пожалуйста, укажите код с вашим вопросом.   -  person nietonfir    schedule 19.10.2013
comment
@nietonfir См. мою последнюю правку.   -  person Jordan Eldredge    schedule 19.10.2013
comment
Что происходит в вашем контроллере?   -  person nietonfir    schedule 19.10.2013
comment
При ближайшем рассмотрении, похоже, что моя библиотека аутентификации (Ion Auth) использует заголовок Refresh вместо заголовка Location. Кажется, в этом проблема. Заголовок Location вроде работает! Спасибо за вашу помощь.   -  person Jordan Eldredge    schedule 19.10.2013
comment
Добро пожаловать. ;-) Было бы неплохо, если бы вы сами ответили на свой вопрос на случай, если у кого-то еще возникнет такая проблема.   -  person nietonfir    schedule 19.10.2013
comment
Прежде чем я это сделаю, мне бы хотелось узнать, можно ли найти решение, не требующее внесения изменений в библиотеку Ion Auth. Итак, мой вопрос: может ли Codeception следовать заголовку обновления? Следует ли мне отредактировать этот вопрос или создать для этого новый?   -  person Jordan Eldredge    schedule 19.10.2013


Ответы (1)


Оказывается, это было вызвано тем, что Ion Auth использует заголовок «Reload» вместо «Location» заголовок для перенаправления. По какой-то причине Codeception (или, возможно, базовый PhpBrowser) не подчиняется этой форме перенаправления. Если я изменю его на переадресацию заголовка «Местоположение», тест пройдет успешно.

Я начал другую задачу, чтобы выяснить, почему перенаправление "Reload" не работает. Вы можете найти его здесь: Почему PhpBrowser Codeception не следует за заголовком Reload ?

person Jordan Eldredge    schedule 19.10.2013
comment
Я был веб-разработчиком много лет и никогда не слышал о заголовке Reload. Возможно, это объясняет недосмотр в тестовой среде. Вы имеете в виду заголовок Refresh, который работает как метатег обновления? Я не уверен, насколько широко это поддерживается в современных браузерах. - person Simon East; 07.11.2014