Например есть функция логина:
public function login(Request $request)
{
$user = new User;
$rules_login = $user->rules;
$rules_login['email'] = '';
$rules_login['roles'] = '';
$rules_login['date_of_birth'] = '';
$rules_login['country_id'] = '';
$rules_login['username'] = 'required|max:255|regex:/^[a-z0-9_]+$/';
$validator = Validator::make($request->all(), $rules_login);
if ($validator->fails()) {
return $this->jsonResponse(['errors' => $validator->errors()], 400);
} else {
if ($this->hasTooManyLoginAttempts($request)) {
$this->fireLockoutEvent($request);
return $this->sendLockoutResponse($request);
}
if ($request->capcha) {
$myCurl = curl_init();
curl_setopt_array($myCurl, array(
CURLOPT_URL => 'https://www.google.com/recaptcha/api/siteverify',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => http_build_query(array(
'secret' => $_ENV['RECAPTCHA_SECRET'],
'response' => $request->capcha
))
));
$response = curl_exec($myCurl);
curl_close($myCurl);
$response = json_decode($response);
if ($response->success) {
if ($this->attemptLogin($request)) {
Session::forget('wrong_password');
return ['success' => 'success'];
}
} else {
return ['show_capcha' => true, 'errors' => [Lang::get('auth.wrong_capcha')]];
}
}
if ($this->attemptLogin($request)) {
Session::forget('wrong_password');
return ['success' => 'success'];
} else {
$wrong_password = Session::get('wrong_password');
if ($wrong_password) {
$wrong_password++;
Session::put('wrong_password', $wrong_password);
if ($wrong_password > 5) {
return ['show_capcha' => true, 'errors' => [Lang::get('auth.wrong_auth')]];
}
} else {
Session::put('wrong_password', 1);
}
return ['errors' => [Lang::get('auth.wrong_auth')]];
}
}
}
Как видно из кода при незаполненом поле username должна возвращаться ошибка со статусом 400. Есть роут:
Route::post('login', 'Auth\LoginController@login');
И есть тест:
public function testLoginEmpty()
{
$this->post('/login', ['username' => '', 'password' => '1234567890'])
->seeStatusCode(400);
$this->post('/login', ['username' => 'qwerty', 'password' => ''])
->seeStatusCode(400);
$this->post('/login', ['username' => '', 'password' => ''])
->seeStatusCode(400);
}
И вот результат теста:
There was 1 failure:
1) LoginTest::testLoginEmpty Failed asserting that 302 matches expected 400.
C:\OpenServer\domains\fantasyleague\vendor\laravel\framework\src\Illuminate\Foundation\Testing\Concerns\MakesHttpRequests.php:462 C:\OpenServer\domains\fantasyleague\tests\Auth\LoginTest.php:17
Фейл в первом тесте, остальные два проходят. Если первый убрать то тогда такой же результат будет для следующего - о зафейлится, а последний пройдёт
А нужно было сделать $this->post('logout');
Просто в предыдущих тестах пользователь логинился и потому был редирект
Виртуальный выделенный сервер (VDS) становится отличным выбором