내 컨트롤러에서 PHPUnit을하고있어 요청 권한을 조롱 한 것처럼 보일 수 없습니다.Laravel PHPUnit mock 요청
단위 테스트에 그런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]'
];
$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
에 사용자 이름의 키를 삭제할 때 내가 볼 수있는 지금까지 배열
감사합니다. @Tropus. '$ request-> has ('username')'은 이제'true'를 반환하지만'$ request-> has ('email')'은 다음과 같은 오류를 반환합니다 :'메소드 이름에 대한 기대가 실패했습니다 : 0 번 이상 호출 됨 호출에 대한 매개 변수 0 Illuminate \ Http \ Request :: has ('email')가 예상 값과 일치하지 않습니다. 두 개의 문자열이 같다고 주장하지 못했습니다 .'. 나는 당신이 진술 한 것과 똑같이'email'을위한 또 다른 스 니펫을 추가했으나 여전히 오류가 발생했습니다. –
basagabi
@basagabi 특정 방법이 예상되는 첫 번째 사례는 두 번째로 호출 할 때 정의 된 첫 번째 시간까지 연기됩니다. 이 경우에는 with 문에서 콜백을 사용하거나 any() 대신 at()를 사용하고 싶을 것입니다. 예를 들면 : 첫 번째 경우에는'expects ($ this-> at (0))' 두 번째 발생을 위해 ($ this-> at (1))'을 기대합니다. 이러한 우수한 답변들에 대한 자세한 내용은 [여기] (https://stackoverflow.com/a/5989095) 및 [여기] (https://stackoverflow.com/a/5484864/6649665) – Tropus
완벽하게 작동합니다! 너는 생명의 은인이야! – basagabi