|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库用于伪数据的生成 , 我们通过一个工厂方法 , 实现为每个用户创建头像的需求 。
【|3分钟短文:刀刃向内,Laravel缓存测试简单入门】上述方法 , 从源目录内随机地获取一张图片 , 并拷贝到目标路径 , 并使用用户名进行区分 。
然后构造测试用例 , 创建一个新的用户 , 访问用户的个人信息页面 , 并查看头像是否存在 。
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 :-)
我是@程序员小助手 , 持续分享编程知识 , 欢迎关注 。
推荐阅读
- 3分钟就能做好的营养早餐,味道鲜美口感好,小孩爱吃极了!
- 鸡蛋这样做太香了,不用蒸不用煎,早餐端上桌,3分钟就光盘,香
- 早餐迷上吃饼,不揉面不擀面,3分钟出锅,比包子油条好吃多了
- 最下饭的快手菜! 3分钟就能出锅, 连吃3大碗饭都嫌少!
- 花卷不要再蒸着吃了,试试着样做,3分钟就出锅,宣软又酥脆!
- 比烧烤还好吃孜然鱿鱼须,香辣可口,3分钟学会,吃上就停不下来
- 安乐死过山车|全球第一个安乐死过山车,3分钟结束生命,至今无人活着下来!
- 成本不足4元,盐都不放,上桌3分钟光盘,不愧是经典名菜
- 3分钟学会5种丸子的做法,超全,照着做成功率极高!
- 冰箱里刚拿出的冻肉,千万别拿水泡!教你1招,3分钟把冻肉解冻
