php 如何在Laravel Dusk中获取会话数据?

zz2j4svz  于 2024-01-05  发布在  PHP
关注(0)|答案(3)|浏览(145)

我想知道为什么我们在测试Laravel Dusk时无法获得会话数据?
在Laravel中的任何控制器中,我们都可以使用Session::get('data');获取会话数据
当我们运行Laravel Dusk测试时,我们在打开phpdebugbarr的情况下截图(非常有用)。我们可以在截图上看到会话正确地填充了我们的数据,但是如果我们在browser->screenshot()之后调用Session::all();,那么它会返回一个空数组!
有没有可能获得与黄昏的会话?我没有找到任何提到与黄昏在谷歌会议管理。

s1ag04yj

s1ag04yj1#

首先,最好说会话是服务器端的概念,与cookie不同。正如Laravel定义的Dusk:
Laravel Dusk提供了一个富有表现力,易于使用的浏览器自动化和测试API。
这意味着在Dusk浏览器示例中,你已经达到了只作为自动化系统或用户查看结果的最终水平。这意味着在渲染部分中,你只能访问前端部分,但不能访问后端部分。

mhd8tkvw

mhd8tkvw2#

由于Dusk基于浏览器的测试,在测试期间直接存储会话数据是具有挑战性的。Dusk与Laravel应用程序的服务器端进程(包括会话管理)分开运行。
它的工作方式就像外部浏览器一样,即不能直接访问会话等服务器端数据。要测试涉及会话数据的特定功能,您可能需要检查浏览器级别的更改,例如显示数据或UI的更改,而不是尝试直接访问会话数据。对于更复杂的操作,可能需要像API调用或数据库查询这样的间接方法来检查会话状态。

jhdbpxl9

jhdbpxl93#

Laravel Dusk使用一个单独的测试环境,因此,它不与常规应用程序共享相同的会话。但是,可以在Dusk测试中访问会话数据。
为了解决这个问题,你可以创建一个helper函数,直接从session存储中检索session数据。这样,你就可以在Dusk测试中访问session数据。
这是一个如何创建这样一个辅助函数并在Dusk测试中使用它的示例。
1.创建一个helper函数来获取会话数据:

// In your test helpers file (e.g., tests/DuskTestCase.php)
function getSessionData($key = null) {
    $sessionFilePath = storage_path('framework/sessions/' . session()->getId());
    
    if (file_exists($sessionFilePath)) {
        $sessionData = unserialize(file_get_contents($sessionFilePath));
        
        if ($key !== null) {
            return data_get($sessionData, $key);
        } else {
            return $sessionData;
        }
    }
    
    return null;
}

字符串
1.在你的Dusk测试中使用helper函数:

// In your Dusk test
public function testSessionData() {
    $this->browse(function ($browser) {
        $browser->visit('/your-page')
            ->screenshot('session_data_screenshot');

        // Retrieve session data using the helper function
        $sessionData = getSessionData();
        
        // Use the retrieved session data as needed
        // For example:
        $userData = data_get($sessionData, 'user');
        $this->assertEquals('John Doe', $userData['name']);
    });
}


在本例中,getSessionData helper函数直接读取会话文件并返回会话数据。然后您可以在Dusk测试中使用此helper函数访问会话数据并基于检索到的数据执行Assert。
请记住将/your-page替换为您要在Dusk测试中访问的页面的实际URL。

相关问题