PHPUNIT возвращает неверный результат в теста

430
03 февраля 2017, 07:41

Например есть функция логина:

   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

Фейл в первом тесте, остальные два проходят. Если первый убрать то тогда такой же результат будет для следующего - о зафейлится, а последний пройдёт

Answer 1

А нужно было сделать $this->post('logout'); Просто в предыдущих тестах пользователь логинился и потому был редирект

READ ALSO
Создание классов

Создание классов

Правильно ли создавать 2 класса в одном файле php?

380
Doctrine | CASE WHEN в SELECT

Doctrine | CASE WHEN в SELECT

Добрый деньСоставляю в Doctrine запрос

444
как подключиться к Mysql?

как подключиться к Mysql?

Разбираюсь с фреймверком laravel 5, изучаю документацию

420