Я тестирую класс в laravel 5.4 с phpunit, который использует сессию для получения данных. Извлечение данных сеанса работает при непосредственном доступе к ним, когда приложение работает, иначе «сессия (« потребитель »)» возвращает значение, однако, когда я пытаюсь протестировать функцию, которая использует сеанс, я получаю следующую ошибку:
ReflectionException: сеанс класса не существует
Может кто-нибудь, пожалуйста, пролить свет на то, как выполнить настройку данных сеанса во время теста.
Я пытался с помощью:
$this->session()->put([$array_value])
но получаю ошибку «сеанс класса не существует на class_im_testing»
Заранее спасибо за помощь!
public function test_get_user()
{
$mockUser = [
'id' => 'cf442564-d076-4198-beb5-edef5aa51a69',
'name' => 'John Doe',
'fname' => 'John',
'lname' => 'Doe',
];
session->put('consumer', [
'id' => 'cf442564-d076-4198-beb5-edef5aa51a69',
'name' => 'John Doe',
'fname' => 'John',
'lname' => 'Doe',
]);
$user = $this->repo->getUser();
$this->assertEqual($user, $mockUser);
}
public function getUser()
{
$user = new User(session('consumer'));
return $user;
}
Laravel предлагает множество методов, помогающих с тестированием, но чтобы использовать их, вам нужно убедиться, что вы используете правильный класс.
Если вы используете стандартный шаблон, вы получите TestCase
учебный класс. Это класс, который нужно расширить, чтобы получить такой метод, как $this->withSession
,
Это потому, что контрольный пример расширяет рамки TestCase
класс, который в свою очередь включает в себя много черт, среди которых есть черта InteractsWithSession
которая является чертой, которая на самом деле предлагает метод withSession
,
Кроме того, Laravel TestCase также расширяет тестовый пример PhpUnit, так что у вас все еще есть доступ ко всем утверждениям PhpUnit.
Других решений пока нет …