我正在我的控制器上执行 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' => '[email protected] /cdn-cgi/l/email-protection'
];
$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
数组上的键
模拟请求并不理想,但有时你只是想这样做:
protected function createRequest(
$method,
$content,
$uri = '/test',
$server = ['CONTENT_TYPE' => 'application/json'],
$parameters = [],
$cookies = [],
$files = []
) {
$request = new \Illuminate\Http\Request;
return $request->createFromBase(
\Symfony\Component\HttpFoundation\Request::create(
$uri,
$method,
$parameters,
$cookies,
$files,
$server,
$content
)
);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)