Ошибка Larabook tests — не удается войти в систему пользователя

#php #laravel-4

#php #laravel-4

Вопрос:

Я просмотрел серию Larabook в Laracasts, но, похоже, не могу найти решение своей проблемы. Мой код отлично работает в браузере, но мои функциональные тесты терпят неудачу, потому что пользователь не вошел в систему. Это тест регистрации, и он проходит до последнего бита
$I->assertTrue(Auth::check());

 $I = new FunctionalTester($scenario);
$I->am('guest');
$I->wantTo('sign up for a Larabook account');

$I->amOnPage('/');
$I->click('Sign Up!');
$I->seeCurrentUrlEquals('/register');

$I->fillfield('Username:', 'JohnDoe');
$I->fillfield('Email:', 'john@example.com');
$I->fillfield('Password:', 'demo');
$I->fillfield('Password Confirmation:', 'demo');
$I->click('Sign Up');

$I->seeCurrentUrlEquals('');
$I->see('Welcome to Larabook');
$I->seeRecord('users', [
    'username' => 'JohnDoe'
]);


$I->assertTrue(Auth::check());
 

Проблема в том, что он не регистрирует пользователя, поэтому Auth::check() возвращает false. Я последовал за Джеффри к письму и не могу понять, почему оно не работает.

Для SignInCept у меня такая же проблема

 $I = new FunctionalTester($scenario);
$I->am('a larabook member');
$I->wantTo('login to my larabook account');

$I->signIn();
$I->seeInCurrentUrl('/statuses');
$I->see('Post a status');
$I->assertTrue(Auth::check());
 

Метод входа в систему

 public function signIn()
    {
        $email = 'foo@example.com';
        $username = 'Foobar';
        $password = 'foo';

        $this->haveAnAccount(compact('email', 'username', 'password'));

        $I = $this->getModule('Laravel4');

        $I->amOnPage('/login');
        $I->fillField('email', $email);
        $I->fillField('password', $password);
        $I->click('Sign In');
    }
 

Тесты завершаются неудачей при assertTrue, потому что, опять же, он принимает учетные данные, даже переходит к URL-адресу статуса, но каким-то образом пользователь еще не вошел в систему.

Все мои функциональные тесты завершаются неудачей всякий раз, когда я вызываю метод входа. Может кто-нибудь, пожалуйста, скажите мне, почему он не регистрирует пользователя?

Комментарии:

1. Вы уверены, что Auth::check() это тот метод, который вы должны вызывать здесь? Я никогда не работал с Laravel, поэтому могу ошибаться, но это похоже на общий метод проверки подлинности в контексте текущего приложения. В этом случае это будет среда, в которой вы запускаете тесты, а не среда, которую вы тестируете. Я бы ожидал, что протестированный env будет инкапсулирован и разделен. Именно так это работает в других фреймворках.

2. Это то, что используется в руководстве, но я также использовал метод тестирования модуля laravel4 для проверки аутентифицированного пользователя $I->seeAuthentication(); , но он также выдает ошибку, что аутентифицированного пользователя нет. Моя проблема в том, что пользователь не вошел в систему.

Ответ №1:

Проблема заключалась в том, что по умолчанию в appconfigtestingsession.php драйвере установлено array значение, которое означает, что сохранение данных не происходит. Таким образом, решение состоит в том, чтобы изменить это на или database cookie или любой из тех, которые указаны в разделе php_doc. В моем случае я использовал cookie и все мои тесты прошли.