我想知道为什么我们在测试Laravel Dusk时无法获得会话数据?
在Laravel中的任何控制器中,我们都可以使用Session::get('data');
获取会话数据
当我们运行Laravel Dusk测试时,我们在打开phpdebugbarr的情况下截图(非常有用)。我们可以在截图上看到会话正确地填充了我们的数据,但是如果我们在browser->screenshot()
之后调用Session::all();
,那么它会返回一个空数组!
有没有可能获得与黄昏的会话?我没有找到任何提到与黄昏在谷歌会议管理。
3条答案
按热度按时间s1ag04yj1#
首先,最好说会话是服务器端的概念,与cookie不同。正如Laravel定义的Dusk:
Laravel Dusk提供了一个富有表现力,易于使用的浏览器自动化和测试API。
这意味着在Dusk浏览器示例中,你已经达到了只作为自动化系统或用户查看结果的最终水平。这意味着在渲染部分中,你只能访问前端部分,但不能访问后端部分。
mhd8tkvw2#
由于Dusk基于浏览器的测试,在测试期间直接存储会话数据是具有挑战性的。Dusk与Laravel应用程序的服务器端进程(包括会话管理)分开运行。
它的工作方式就像外部浏览器一样,即不能直接访问会话等服务器端数据。要测试涉及会话数据的特定功能,您可能需要检查浏览器级别的更改,例如显示数据或UI的更改,而不是尝试直接访问会话数据。对于更复杂的操作,可能需要像API调用或数据库查询这样的间接方法来检查会话状态。
jhdbpxl93#
Laravel Dusk使用一个单独的测试环境,因此,它不与常规应用程序共享相同的会话。但是,可以在Dusk测试中访问会话数据。
为了解决这个问题,你可以创建一个helper函数,直接从session存储中检索session数据。这样,你就可以在Dusk测试中访问session数据。
这是一个如何创建这样一个辅助函数并在Dusk测试中使用它的示例。
1.创建一个helper函数来获取会话数据:
字符串
1.在你的Dusk测试中使用helper函数:
型
在本例中,
getSessionData
helper函数直接读取会话文件并返回会话数据。然后您可以在Dusk测试中使用此helper函数访问会话数据并基于检索到的数据执行Assert。请记住将
/your-page
替换为您要在Dusk测试中访问的页面的实际URL。