PhpUnit 和 Laravel 5.4 如何在测试期间模拟会话数据
PhpUnit and Laravel 5.4 how to mock Session data during a test
我正在使用使用会话获取数据的 phpunit 在 laravel 5.4 中测试 class。当应用程序是 运行 aka "session('consumer')" returns 值时直接访问会话数据时检索会话数据有效,但是当我尝试测试使用会话的函数时,出现以下错误:
ReflectionException: Class 会话不存在
有人可以阐明如何在测试期间完成设置会话数据。
我试过使用:
$this->session()->put([$array_value])
但是报错 "class session does not exist on 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 提供了很多方法来帮助测试,但为了使用它们,您需要确保使用正确的 class.
如果您使用的是默认样板文件,您会得到 TestCase
class。这是您需要扩展的 class 以获得诸如 $this->withSession
.
的方法
这是因为测试用例扩展了框架 TestCase
class which in turn includes many traits, among them is the the trait InteractsWithSession
,它是实际提供方法 withSession
的特征。
此外,Laravel TestCase 还扩展了 PhpUnit 测试用例,因此您仍然可以访问所有 PhpUnit 断言。
我正在使用使用会话获取数据的 phpunit 在 laravel 5.4 中测试 class。当应用程序是 运行 aka "session('consumer')" returns 值时直接访问会话数据时检索会话数据有效,但是当我尝试测试使用会话的函数时,出现以下错误:
ReflectionException: Class 会话不存在
有人可以阐明如何在测试期间完成设置会话数据。
我试过使用:
$this->session()->put([$array_value])
但是报错 "class session does not exist on 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 提供了很多方法来帮助测试,但为了使用它们,您需要确保使用正确的 class.
如果您使用的是默认样板文件,您会得到 TestCase
class。这是您需要扩展的 class 以获得诸如 $this->withSession
.
这是因为测试用例扩展了框架 TestCase
class which in turn includes many traits, among them is the the trait InteractsWithSession
,它是实际提供方法 withSession
的特征。
此外,Laravel TestCase 还扩展了 PhpUnit 测试用例,因此您仍然可以访问所有 PhpUnit 断言。