- Версия платформы Api: 2.5.4
- Версия PHPUnit: 9.0.2
- Symfony версия: 5.0.7
Я сделал API с платформой API. Я управляю безопасностью с помощью специального сторожевого аутентификатора на основе symfony do c и токена-носителя JWT. Когда я тестирую его вручную с почтальоном, все в порядке и работает нормально. Когда я тестировал его с помощью класса ApiTestCase, предоставляемого с платформой API, я получил два вида ошибок. Оба они происходят в одном и том же случае:
- тест 1 -> не аутентифицирован -> ответ в порядке
- тест 2 -> аутентифицирован -> ответ в порядке
- тест 3 -> аутентифицирован или нет -> неправильный ответ
Когда я запрашиваю коллекцию, API возвращает только первые 2 или 3 элемента, а не все, как предполагалось.
Когда я запрашиваю предмет, я просто получаю ошибку аутентификации 401.
Вот код моего тестового класса для воспроизведения ошибки:
<?php
namespace App\Tests;
use ApiPlatform\Core\Bridge\Symfony\Bundle\Test\ApiTestCase;
class MyCollectionTest extends ApiTestCase
{
public function test1() #test is passing
{
$client = static::createClient();
$response = $this->client->request(
'GET',
'/foos',
[
'headers'=> [],
'json' => []
]
);
$this->assertResponseStatusCodeSame(200);
$this->assertJsonEquals(['item1', 'item2', 'item3','item4', 'item5', 'item6']);
}
public function test2() #test is passing
{
$client = static::createClient();
$response = $this->client->request(
'GET',
'/foos',
[
'headers'=> ['Authorization'=>'Bearer:valid_token'],
'json' => []
]
);
$this->assertResponseStatusCodeSame(200);
$this->assertJsonEquals(['item1', 'item2', 'item3','item4', 'item5', 'item6']);
}
public function test3() #test is invalid, only 'item1', 'item2', 'item3' are returned
{
$client = static::createClient();
$response = $this->client->request(
'GET',
'/foos',
[
'headers'=> [],
'json' => []
]
);
$this->assertResponseStatusCodeSame(200);
$this->assertJsonEquals(['item1', 'item2', 'item3','item4', 'item5', 'item6']);
}
}
?>
<?php
namespace App\Tests;
use ApiPlatform\Core\Bridge\Symfony\Bundle\Test\ApiTestCase;
class MyItemTest extends ApiTestCase
{
public function test1() #test is passing
{
$client = static::createClient();
$response = $this->client->request(
'GET',
'/foos/1',
[
'headers'=> [],
'json' => []
]
);
$this->assertResponseStatusCodeSame(200);
$this->assertJsonEquals(['item1']);
}
public function test2() #test is passing
{
$client = static::createClient();
$response = $this->client->request(
'GET',
'/foos/1',
[
'headers'=> ['Authorization'=>'Bearer:valid_token'],
'json' => []
]
);
$this->assertResponseStatusCodeSame(200);
$this->assertJsonEquals(['item1']);
}
public function test3() #test is invalid, 401 is returned
{
$client = static::createClient();
$response = $this->client->request(
'GET',
'/foos/1',
[
'headers'=> [],
'json' => []
]
);
$this->assertResponseStatusCodeSame(200);
$this->assertJsonEquals(['item1']);
}
}
?>
Есть идеи ? На прошлой неделе я уже писал о проблеме на github платформы Api, но не получил никаких ответов ...