lumen 单元测试的一些问题

时间:2021-08-07 00:25:03

1、一个 test 多个请求

如 $this->post,然后又  $this->post,我们会发现第二个请求中的请求参数是和第一个请求的参数是完全一样的,然后在 Controller 里面通过 spl_object_hash 方法发现两个请求的 request 实例是一样的,应该是第二个请求发起的时候,request 不再实例化,直接使用了上一次请求的 request 实例。

这种情况我们可以用过 request 实例的 replace 方法,替代掉 request 实例的请求参数,这样我们第二个请求就可以按照我们预期地跑了。

$this->post('xxx', ['a' => 1]);

app('request')->replace([
'b' => 2
]); $this->post('yyy');

  

2、使用 mock 的时候,mock 一个不存在的方法不会报错

其实这也算是 mock 本身要实现的功能,但是如果我们可能在调用多个对象的方法的时候会混淆,mock 了一个错误的对象的方法,但实际上应该是 mock 另外一个。

如果我们 mock 了之后,对象方法表现还是原来的样子就应该考虑一下是不是 mock 了一个错误的对象。

3、不能对 private final static 方法进行 mock,需要对 mock 的对象调用 setMethods,说明我们要对哪些方法进行 mock,否则可能会报错。

4、配合 laravel-modules 的时候,需要把路由的 require_once 替换成 require,但是这样会导致后续请求会很慢(需要做特殊处理,防止重复加载这些文件的同时,路由又能保留下来)

5、phpunit 需要添加

<php>
  <env name="API_VERSION" value="v1.1.5"/>
</php>

6、mock user

$this->be(User)

管理员

$this->be(AdminUser, 'admin')

7、请求

$this->get()

$this->post()

8、响应

$this->response

9、状态码

$this->response->status()