#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
и все мои тесты прошли.