Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PhpUnit和Laravel 5.4如何在测试期间模拟会话数据_Php_Laravel_Phpunit_Laravel Session - Fatal编程技术网

PhpUnit和Laravel 5.4如何在测试期间模拟会话数据

PhpUnit和Laravel 5.4如何在测试期间模拟会话数据,php,laravel,phpunit,laravel-session,Php,Laravel,Phpunit,Laravel Session,我正在用phpunit测试Laravel5.4中的一个类,该类使用会话获取数据。在应用程序运行时直接访问会话数据(也称为“会话('consumer'))时,检索会话数据会起作用。当我尝试测试使用会话的函数时,会出现以下错误: ReflectionException:类会话不存在 有人能告诉我们如何在测试期间设置会话数据吗 我试过使用: $this->session()->put([$array\u value])但出现错误“class\u im\u测试中不存在类会话” 提前感谢您的帮助 publ

我正在用phpunit测试Laravel5.4中的一个类,该类使用会话获取数据。在应用程序运行时直接访问会话数据(也称为“会话('consumer'))时,检索会话数据会起作用。当我尝试测试使用会话的函数时,会出现以下错误:

ReflectionException:类会话不存在

有人能告诉我们如何在测试期间设置会话数据吗

我试过使用:

$this->session()->put([$array\u value])
但出现错误“class\u im\u测试中不存在类会话”

提前感谢您的帮助

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);
}


Laravel提供了很多方法来帮助测试,但是为了使用它们,您需要确保使用的是正确的类

如果您使用的是默认样板文件,则会得到一个类。这是需要扩展的类,以便获得方法,如
$This->withSession

这是因为测试用例扩展了框架类,而框架类又包含了许多特性,其中的特性是the trait,它实际上提供了方法
和session


此外,Laravel测试用例还扩展了PhpUnit测试用例,因此您仍然可以访问所有PhpUnit断言

根据@apokryfos使用“$this->withSession([…])时返回的错误,它应该是
$this->withSession([…])
调用未定义的函数类\u im\u testing::withSession@Leevashan该方法应该在测试用例类中,而不是在您正在测试的类中。确保您的测试用例扩展了laravel附带的类,而不是默认的PhpUnit测试用例类laravel的测试用例扩展,后者有许多额外的方法,还包括许多特点。您的
withSession
方法实际上就是从中获得的,这是其中包含的特征之一。感谢您的指导,正如Leevashan指出的,导入正确的TestCase类解决了我们的问题。
public function getUser()
{
   $user = new User(session('consumer'));
   return $user;
}