Laravel PHPUnit模拟请求

8 浏览
0 Comments

Laravel PHPUnit模拟请求

我正在对我的控制器进行PHPUnit测试,但似乎无法正确模拟请求。

以下是控制器的代码:

use Illuminate\Http\Request;
public function insert(Request $request)
{
    // ... 这里是一些代码
    if ($request->has('username')) {
        $userEmail = $request->get('username');
    } else if ($request->has('email')) {
        $userEmail = $request->get('email');
    }
    // ... 这里是一些代码
}

然后在单元测试中,

public function testIndex()
{
    // ... 这里是一些代码
    $requestParams = [
        'username' => 'test',
        'email'    => '[email protected]'
    ];
    $request = $this->getMockBuilder('Illuminate\Http\Request')
        ->disableOriginalConstructor()
        ->setMethods(['getMethod', 'retrieveItem', 'getRealMethod', 'all', 'getInputSource', 'get', 'has'])
        ->getMock();
    $request->expects($this->any())
        ->method('get')
        ->willReturn($requestParams);
    $request->expects($this->any())
        ->method('has')
        ->willReturn($requestParams);
    $request->expects($this->any())
        ->method('all')
        ->willReturn($requestParams);
    // ... 这里是一些代码
}

问题在于,无论何时我调用 var_dump($request->has('username');,它总是返回整个数组 $requestParams 的值。我期望它应该返回 true,因为数组中存在 username 键。

然后,当我删除 $requestParams 中的 username 键时,它应该返回 false,因为数组中不包含 username 键。

0