首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

3分钟短文:刀刃向内,Laravel缓存测试简单入门

引言

程序员很难发现自己写的bug,这是一条难破的槛。所以要写测试,要让自己的程序给别人测试,思路不同,实现方法不同,才能发现业务逻辑中的不合理和bug。

laravel集成了PHPunit测试框架可方便书写测试用例。本文就来个抛砖引玉式的简介。

代码时间

laravel应用安装完毕之后,在vendor/bin/目录内已经内置了 phpunit 文件,在windows平台下,使用phpunit.bat文件。

打开命令行工具,进入到laravel工作根目录,运行命令:

./vendor/bin/phpunit

默认应用只写了两个测试用例,所以输出结果如下图:

文件上传测试

我们先来模拟一个虚拟的文件,执行表单文件上传功能。这里构造文件对象,使用 Symfony UploadedFile 对象,下面的代码中,我们假设存在storage/tests目录。该目录下放置一个for-tests.jpg图片文件。

下面是一个测试方法:

我们首先构造了一个 UploadFile 对象,然后调用 post 方法访问upload-route,并将上传参数正确地填写。最后验证上传是否成功。

很多时候测试路由要求必须有真是的文件存在,比如对于用户,我们要求其必须有一个头像文件。laravel使用了Faker库用于伪数据的生成,我们通过一个工厂方法,实现为每个用户创建头像的需求。

上述方法,从源目录内随机地获取一张图片,并拷贝到目标路径,并使用用户名进行区分。

然后构造测试用例,创建一个新的用户,访问用户的个人信息页面,并查看头像是否存在。

session测试

web网页为了保持会话上下文信息,使用session缓存数据。我们在之前的文章内有过详细的说明。那么现在我们看一看,如何对session进行测试。

比如某个页面,断言某个键值是否匹配:

$this->assertSessionHas('key','value');

或者同时根据不同的规则,测试不同的数据:

$check=[

 'has',

 'hasWithThisValue'=>'thisValue',

];

$this->assertSessionHasAll($check);

laravel在表单验证中使用 throw exception 的方式返回,并为页面写入errors数组,记录验证错误信息。我们测试某个页面是否有错误信息:

$this->post('test-route', ['failing'=>'data']);

$this->assertSessionHasErrors(['name','email']);

Cache缓存测试

测试缓存,与session类似,不过更加精简。因为cache是全局的数据,比如测试某个键值对的正确性:

Cache::put('key','value',15);

$this->assertEquals('value',Cache::get('key'));

大致如此,不过多赘述。

Cookie测试

用户端缓存一些数据,可以有效降低网络请求量。但是在laravel中,为了安全性,cookie数据都是经过加密处理的,我们如果直接在测试用例中使用,是办不到的。所以需要首先排除在测试中的cookie加密

我们看一下注册的默认中间件的内容:

protected$middlewareGroups=[

 'web'=>[

     \App\Http\Middleware\EncryptCookies::class,

],

],      

然后查看EncryptCookies文件,该类内提供了方法:

protected$except=[];

此处填写cookie名,指定不用加密的那些键名。这种方法添加的cookie名全局不加密,但是对于专门在测试时不使用加密的方法,有些矫枉过正。所以我们需要在测试用例中,实时声明不加密,那么只需在测试方法中这样实现:

在中间件内实时声明cookie名不加密,然后请求url并传入cookie,最后断言cookie的值。

如果出于一些考虑,在全局不加密的情况下,要测试单个加密的cookie值,那么可以手动加密字符串并传入url中:

$encryptedBaz=app(Encrypter::class)->encrypt('baz');

Encrypter就是laravel框架用来加密cookie值的方法。

写在最后

本文通过对网页端的session,cookie,cache等组件值的测试,演示了常用的构造测试用例的方法。在测试之前,需要大家对laravel的框架中,处理此种缓存数据的方法有所深入了解。

Happy coding :-)

我是@程序员小助手,持续分享编程知识,欢迎关注。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20200922A0GA5T00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券