Этот тест не пройден, потому что он никогда не пройдет вызов функции Auth::attempt()
. Я поставил заявление dd()
, чтобы доказать, что это не сработает.
Если я удалю два Auth::shouldReceive()
, код запустит первый оператор dd()
.
Если я оставлю хотя бы один Auth::shouldReceive()
, первый оператор dd()
никогда не будет вызван.
Если я добавлю ->twice()
вместо ->once()
, ошибок не будет, что странно, потому что он должен жаловаться, что он был вызван только один раз.
Если я помещу оператор dd()
в первую строку контроллера, он не запустится, пока я не удалю функции Auth::shouldReceive()
.
Я должен быть чем-то глупым, чего я не понимаю, потому что я просмотрел много руководств.
Контроллер
public function postLogin() {
$email = Input::get('email');
$password = Input::get('password');
dd('Does not make it to this line with auth::shouldReceive() in the test');
if (Auth::attempt(array('email'=>$email, 'password'=>$password))) {
dd("Doesn't make it here either with auth::shouldReceive() mock.");
$user = Auth::user();
Session::put('user_timezone', $user->user_timezone);
return Redirect::to('user/dashboard')->with('message', 'You are now logged in!');
} else {
return Redirect::to('user/login')->with('message', 'Your username/password combination was incorrect')->withInput();
}
}
Тест
public function testUserTimezoneSessionVariableIsSetAfterLogin()
{
$user = new User();
$user->user_timezone = 'America/New_York';
$user->email = '[email protected]';
$user->password = 'test';
$formData = [
'email' => '[email protected]',
'password' => '123',
];
\Auth::shouldReceive('attempt')->once()->with($formData)->andReturn(true);
\Auth::shouldReceive('user')->once()->andReturn($user);
$response = $this->call('POST', '/user/login', $formData);
$this->assertResponseStatus($response->getStatusCode());
$this->assertSessionHas('user_timezone');
}
Auth::user()
может быть вызван некоторыми внутренними органами. Изменитеonce()
наzeroOrMoreTimes()
и посмотрите, сохраняется ли проблема. - person BrokenBinary   schedule 26.06.2015dd()
вверху, и он не выполняется. - person Nick   schedule 26.06.2015