Тестирование контроллера с помощью PHPUnit, но выдает ошибку 401 - PullRequest
0 голосов
/ 09 мая 2019

Я делаю некоторые тесты с PHPUnit, но у меня есть некоторые проблемы, особенно при тестировании контроллера.

Я хочу протестировать маршрут контроллера, просто вызвав маршрут и проверив, является ли ответ HTTP-статусом 200. Но также в консоли есть ошибки smae.

Token Error Это говорит что-то о токене, который отсутствует. Я понятия не имею, что это за знак.

401 Error

Также это ошибка 401, которую он получает.

Мой PHPUnit-Test выглядит так:

namespace App \ Tests \ Controller;

использовать Symfony \ Bundle \ FrameworkBundle \ Test \ WebTestCase;

класс PersonControllerTest расширяет WebTestCase { частный клиент $;

protected function setUp()
{
    $this->client = static::createClient([], [
        'PHP_AUTH_USER' => 'user',
        'PHP_AUTH_PW'   => 'pass',
    ]);
}


public function testCreate()
{

    $this->client->request('GET','/create');

    $this->assertEquals(200, $this->client->getResponse()->getStatusCode());
}

public function testIndex()
{

    $this->client->request('GET','/');

    $this->assertEquals(200, $this->client->getResponse()->getStatusCode());
}

}

Я пробовал это с аутентификацией в методе setUp -> не работал.

У вас есть какие-либо подсказки?

Спасибо за все ответы и / или комментарии

Ответы [ 2 ]

0 голосов
/ 13 мая 2019
protected function setUp()
{
    $this->client = static::createClient();

    $this->logIn();
}

private function logIn()
{
    $session = $this->client->getContainer()->get('session');

    $firewallName = 'test';
    // if you don't define multiple connected firewalls, the context defaults to the firewall name
    // See https://symfony.com/doc/current/reference/configuration/security.html#firewall-context
    $firewallContext = 'test';

    // you may need to use a different token class depending on your application.
    // for example, when using Guard authentication you must instantiate PostAuthenticationGuardToken
    $testUser = new WebserviceUser('Test@Test.com', ['ROLE_ADMIN'],
        array("employeeid" => array(420),
        "mail" => array("testing@test.com")), false);
    $token = new UsernamePasswordToken($testUser, null, $firewallName, ['ROLE_ADMIN']);
    //var_dump($token);
    $session->set('_security_' . $firewallContext, serialize($token));
    $session->save();

    $cookie = new Cookie($session->getName(), $session->getId());
    $this->client->getCookieJar()->set($cookie);
}


public function testCreate()
{

    $crawler = $this->client->request('GET', '/create');
    $this->assertEquals(200, $this->client->getResponse()->getStatusCode());

    $form = $crawler->filter('form')->form([
        'person[name]' => 'Chruit',
        'person[birthdate][month]' => 2,
        'person[birthdate][day]' => 15,
        'person[birthdate][year]' => 2014,
    ]);

    $this->client->submit($form);
}

public function testIndex()
{

    $this->client->request('GET', '/');

    $this->assertEquals(200, $this->client->getResponse()->getStatusCode());
}

}

Решение - это просто функция входа в систему. $ TestUser должен быть в вашей Active Directory или вашей сети. Остальные параметры не имеют значения.

Мой брандмауэр заблокировал его, поэтому я не мог сделать это обычным способом.

Если вы делаете это так, вам нужно добавить что-то в secourity.yaml, который был создан при установке PHPUnit.

enter image description here

0 голосов
/ 10 мая 2019

Базовый аутентификатор:

   /**
     * @dataProvider urlProvider
     */
    public function testPageIsSuccessful($url)
    {
        $client = self::createClient([], [
            'PHP_AUTH_USER' => getenv('PHP_AUTH_USER'),
            'PHP_AUTH_PW' => getenv('PHP_AUTH_PW')
        ]);
        $client->request('GET', $url);
        $this->assertTrue($client->getResponse()->isSuccessful());
    }

Ключ API

    /**
     * @dataProvider urlApiProvider
     */
    public function testAPIWorks($url)
    {
        $accessToken = $this->getAccessToken();
        $tokenQuery = http_build_query(['access_token' => $accessToken]);
        $url .= '?' . $tokenQuery;
        $client = self::createClient([]);
        $client->request('GET', $url, [], [], ['HTTP_ACCEPT' => 'application/json']);

        $this->assertTrue($client->getResponse()->isSuccessful());
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...