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

标签 php laravel phpunit laravel-session

我正在使用 phpunit 测试 laravel 5.4 中的一个类,该类使用 session 获取数据。当应用程序运行时直接访问 session 数据时检索 session 数据有效,也就是“session('consumer')”返回一个值,但是当我尝试测试使用 session 的函数时,出现以下错误:

ReflectionException: 类 session 不存在

有人可以阐明如何在测试期间完成设置 session 数据。

我试过使用:

$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 提供了很多方法来帮助测试,但为了使用它们,您需要确保您使用的是正确的类。

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

这是因为测试用例扩展了框架TestCase类又包含许多特征,其中有特征 InteractsWithSession这是实际上提供方法 withSession 的特征。

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

关于PhpUnit 和 Laravel 5.4 如何在测试期间模拟 session 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51962497/

相关文章:

php - 播放视频 - 服务器配置不正确 - 12939

php - 通过比较它们来递增/递减数据库数值

php - Selenium、XPath 节点集和 PHPUnit

phpunit - 如何使用 phpunit 测试内部数组

php - 尝试运行 coxph 时 R session 中止

javascript - 如何使用 Sweet Alert 确认提交表单?

php - 根据 <select> 输入更改 MySQL 查询以更改 Highcharts 图表

php - 是否可以实现一个扩展 Traversable 的接口(interface)?

php - 防止将路由前缀作为第一个参数传递给 Laravel 5 中的子路由

PHP 方法模拟检查传递给该方法的参数