Laravel测试用例遇到的问题

Wed, Apr 11, 2018 1-minute read

最近在对代码进行优化,其中一项是是使用懒加载的方式获取当前登录的用户对象,在执行测试代码时发现模拟的多个用户请求只有一个生效。最终确认是由于测试用例中同一个Controller只初始化一次导致用户信息未更新。

代码片段如下

#Controller.php

private $user = null;

public function getUser() {
    if(!$this->user && Auth::id()) {
        $this->user = User::find(Auth::id());
    }
    return $this->user;
}

最终修改如下

#Controller.php
private $user = null;

public function getUser() {
    if((!$this->user && Auth::id()) || ($this->user && Auth::id() && $this->user->id != Auth::id())) {
        $this->user = User::find(Auth::id());
    }
    return $this->user;
}