좋아요. "잘못된 자격 증명"로그인 즉 누락 된 비밀번호에 대한 기능 테스트를 작성하는 데 정말로 문제가 있습니다. 여기 Laravel Redirect :: back() -> withErrors()가 테스트에서 작동하지 않습니다.
Route::get('login', array('as' => 'login', 'uses' => '[email protected]'));
Route::resource('session', 'SessionController');
내 SessionController의 내용이다 : 저장() 메소드 :
public function store()
{
$credentials = Input::only('email', 'password');
try {
$this->loginForm->validate($credentials);
if (!Auth::attempt(array('email' => $credentials['email'], 'password' => $credentials['password']))) {
return Redirect::back()->exceptInput('password')->with('flash_message', 'Invalid credentials');
}
return Redirect::to('/')->with('flash_message', 'Welcome back');
}
catch (FormValidationException $e)
{
return Redirect::back()->exceptInput('password')->withErrors($e->getErrors());
}
}
위의 점() 컨트롤러에서 완벽하게 작동 여기 배경에 대한
내 경로 구성입니다 POST 액션이있는 폼을/session에 제출할 때 브라우저 (!). 양식 유효성 검사 오류가 발생하고 난 다시 올바르게 관련 메시지로 채워 내보기에 변수 $ 오류가있는/로그인 ("암호 필드가 필요합니다")로 리디렉션 : 복제 할 때 그러나
@foreach($errors->all() as $error)
{{ $error }}
@endforeach
기능 테스트에서 위의 예상되는 작동 동작에는 문제가 있습니다. 내 테스트의 기본 개요는 다음과 같습니다.
public function testIncorrectCredentialsLogin()
{
$this->client->request('GET', '/login');
$this->assertTrue($this->client->getResponse()->isOk());
$credentials = array(
'email' => '[email protected]',
'password' => ''
);
$this->client->request('POST', '/session', $credentials);
$this->assertRedirectedTo('login', array('errors'));
$crawler = $this->client->followRedirect();
$this->assertSessionHasErrors();
$this->assertHasOldInput();
$this->assertViewHas('errors'); // Fails
}
제 기능 테스트에서 브라우저에서 발생하는 문제를 성공적으로 복제하려고합니다. 먼저 GET/login을 실행 한 후 SessionController :: store()에/POST를 실행하면 누락 된 자격 증명으로 인해 유효성 검사 오류가 발생하고/login으로 다시 리디렉션됩니다. 지금까지는 괜찮 았지만이 리다이렉트를 따라 가면 렌더링 된 로그인 페이지 content/HTML 내에서 볼 수 있으며 $ errors 변수가 없으므로 세션에서 사용 가능한 메시지가 없거나 페이지에 표시됩니다.
무슨 일이 일어날 지 조언 해줄 사람이 있습니까?
미리 감사드립니다.
감사합니다. elfif. 나는 당신의 제안을 이미 다음과 같이 시도했다. (경고 상자 div에 오류 메시지가 표시된다.) $ this-> assertCount (1, $ crawler-> filter ("div.alert-box")); 이것은 false를 반환합니다 (경고 상자가 내용에 없음). 만약 $ this-> client-> getResponse() -> getContent()를 사용하면 오류 메시지가 표시되지 않습니다. 플래시 세션을보기 전에 제거되는 오류와 비슷합니까? – drj201
javascript가 크롤러 AFAIK에 의해 해석되지 않기 때문에 크롤러를 사용하여 콘텐츠를 삭제할 수 없습니다. 처음부터 콘텐츠가 존재하거나 그렇지 않습니다. – elfif