7.创建便于测试的辅助函数
- 本系列文章为
laracasts.com
的系列视频教程——Let's Build A Forum with Laravel and TDD 的学习笔记。若喜欢该系列视频,可去该网站订阅后下载该系列视频, 支持正版 ;- 视频源码地址:github.com/laracasts/Lets-Build-a-...;
- 本项目为一个 forum(论坛)项目,与本站的第二本实战教程 《Laravel 教程 - Web 开发实战进阶》 类似,可互相参照。
本节说明
- 对应视频第 7 小节:Let's Make Some Testing Helpers
本节内容
本节让我们来建立一些测试时用到的辅助函数,方便我们进行编写测试:
修改composer.json
:
. . "autoload-dev": { "psr-4": { "Tests\\": "tests/" }, "files":["tests/utilities/functions.php"] -->这里增加一行 }, . .
新建tests/utilities/functions.php
文件,执行命令将该文件加载进来:
$ composer dump-autoload
我们将获取模型实例这样的方法,例如create()
、make()
抽离出来,放到functions.php
中:
\tests\utilities\functions.php
<?php function create($class,$attributes = []) { return factory($class)->create($attributes); } function make($class,$attributes = []) { return factory($class)->make($attributes); } function raw($class,$attributes = []) { return factory($class)->raw($attributes); }
在很多测试中,我们需要测试用户是否登录。在之前的测试当中,我们使用了be()
,actingAs()
方法来得到一个已登录用户。现在我们在TestCase.php
新建signIn()
方法,将用户登录的逻辑放在基类文件中:
\tests\TestCase.php
<?php namespace Tests; use Illuminate\Foundation\Testing\TestCase as BaseTestCase; abstract class TestCase extends BaseTestCase { use CreatesApplication; protected function signIn($user = null) { $user = $user ?: create('App\User'); $this->actingAs($user); return $this; } }
现在我们需要重构之前的代码,将像factory('App\Reply')->create()
这样的代码片段更改为create('App\Reply')
;be()
、actingAs()
方法更改为signIn()
方法。
对于使用PHP Storm
的 开发人员,我们有建立测试更加便捷的方法:
- 新建一个
template
: - 在相对应的位置填充完模板,在点击
Edit variables
: - 定义应用的位置
everywhere
: - 勾上
Reformat according to style
: - 最后点击
Apply
应用设置,再点击OK
:
建完模板之后,再新建一个 PHP 文件,输入testclass
后使用Tab
键即可补齐模板,十分便捷。
推荐文章: