在Laravel 4单元测试中,如何在请求中设置cookie?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在Laravel 4单元测试中,如何在请求中设置cookie?相关的知识,希望对你有一定的参考价值。
在我的Laravel 4应用程序中,我希望测试特定端点是否在请求中检测并正确响应cookie。因此,在我的单元测试中,我希望在请求中设置一个cookie,然后对响应执行标准断言。
我在单元测试中的调用形式如下:
$response = $this->client->request($method, $endpoint, $params, $files, $server);
我已经为$method
,$endpoint
,$params
和空$files
和$server
指定了正确的值。
我尝试了很多变化,将cookie值放在$params
或$server
的各种键下,但到目前为止,没有运气看到cookie出现在控制器Cookie:get('myname)
下。
如何在单元测试中在请求中设置名称为“myname”且值为“myvalue”的cookie?
更新:
我想我可以简单地在请求中添加一个标题:
Cookie: myname=myvalue
但我必须相信有更多类似Laravel的方式。
更新2:
以上都行不通。
看起来我们可以在扩展IlluminateFoundationTestingTestCase
的测试中执行以下操作:
$this->client->getCookieJar()->set(
new SymfonyComponentBrowserKitCookie('myname', 'myvalue')
);
然后,cookie将通过标准在控制器中公开:
$cookie = Cookie::get('myname'); // $cookie gets 'myvalue'
(通过Laravel.io)
我对需要非常相似的功能进行了测试,我使用$ this-> call()函数进行了测试
$this->call($method, $url, $parameters = [], $cookies = [“name”=> IlluminateSupportFacadesCrypt::encryptString(”Leonardo”)], $files = [], $server = [], $content = null);
如果您需要了解更多或更少的工作方式,请查看此文件:
Illuminate/Foundation/Testing/Concerns/MakesHttpRequests.php
编辑:这只适用于大草原5.2或更大
您可以使用Documentation for TestCase中显示的call()方法设置Cookie
我最近用过类似的东西。这是一个例子:
$cookies = ['cookie_name' => 'cookie_value'];
$response = $this->call("get", 'target/url/for/request', [], $cookies);
这是Laravel Framework Github上的additional issue thread,有人对如何调用它有些困惑。这进一步巩固了我的知识。希望这可以帮助!
编辑:
laravel丢弃的cookie似乎无法解密。警惕这一点。 Here is a Link遇到了这个问题。
他们建议的解决方案(如果此链接死亡):
似乎问题是cookie加密。 Laravel将删除无法解密的cookie。由于测试cookie不是由laravel创建的(我只是使用一个数组来测试cookie,如上一篇文章所示),它们没有加密,它们将被删除。我可以想到两个解决这个问题的方法。
- 只需从app / Http / Kernel.php列表中删除cookie中间件即可。所有cookie将按原样发送到客户端并从客户端接收。如果您不需要加密,或者您想在客户端读取一些cookie,这是一个很好的解决方案。
- 编辑中间件,以便在测试期间不会加密或解密cookie。只需添加一个代码来处理检查环境的功能,并在环境测试时继续执行任何操作。此中间件位于Illuminate / Cookie / Middleware / EncryptCookie.php中。因此,框架更新将撤消此文件中的编辑。如果您需要加密,这是您唯一的解决方案。
你必须把cookie变量与返回响应放在一起然后才能工作
代码看起来像
$ response-> withCookie(cookie('name','value',$ minutes));
返回$ response;
以上是关于在Laravel 4单元测试中,如何在请求中设置cookie?的主要内容,如果未能解决你的问题,请参考以下文章