【发布时间】:2018-03-03 15:39:14
【问题描述】:
我正在控制器上执行 PHPUnit,但我似乎无法正确模拟请求。
这是控制器:
use Illuminate\Http\Request;
public function insert(Request $request)
{
// ... some codes here
if ($request->has('username')) {
$userEmail = $request->get('username');
} else if ($request->has('email')) {
$userEmail = $request->get('email');
}
// ... some codes here
}
然后进行单元测试,
public function testIndex()
{
// ... some codes here
$requestParams = [
'username' => 'test',
'email' => 'test@test.com'
];
$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);
// ... some codes here
}
这里的问题是,每当我 var_dump($request->has('username'); 它总是返回 $requestParams 值,其中是整个数组。我希望它应该返回true,因为数组中存在用户名键。
然后,当我删除 $requestParams 上的用户名键时,它应该返回 false,因为它不包含数组上的 username 键
【问题讨论】:
标签: php laravel unit-testing laravel-5 phpunit