Ich baute eine API mit dingo/api 0.10.0
, Laravel 5.1
und lucadegasperi/oauth2-server-laravel": "^5.1"
.Dingo/API beim Komponententest: Die angegebene Version war unbekannt oder hat keine registrierten Routen
Alle meine Routen funktionieren gut in Postman/Paw! Das Problem tritt auf, wenn ich versuche, die API mit zu testen.
Dies ist Teil meiner route-api.php
Datei
<?php
$api = app('Dingo\Api\Routing\Router');
$api->version(['v1'], function ($api) {
$api->post('oauth/access_token', function() {
return response(
\LucaDegasperi\OAuth2Server\Facades\Authorizer::issueAccessToken()
)->header('Content-Type', 'application/json');
});
$api->group(['middleware' => ['oauth', 'api.auth']], function ($api) {
$api->post('/register', 'YPS\Http\Controllers\Api\[email protected]');
});
Und das ist meine Testdatei UserRegistrationTest.php
class UserRegistrationTest extends ApiTestCase
{
public function setUp()
{
parent::setUp();
parent::afterApplicationCreated();
}
public function testRegisterSuccess()
{
$data = factory(YPS\User::class)->make()->toArray();
$data['password'] = 'password123';
$this->post('api/register', $data, $this->headers)
->seeStatusCode(201)
->seeJson([
'email' => $data['email'],
'first_name' => $data['first_name'],
'last_name' => $data['last_name'],
]);
}
public function testRegisterMissingParams()
{
$this->post('api/register', [], $this->headers, $this->headers, $this->headers)->seeStatusCode(422);
}
}
Die ApiTestCase einfach ein Token abruft und setzt die Header.
private function setHeaders()
{
$this->headers = [
'Accept' => 'application/vnd.yps.v1+json',
'Authorization' => 'Bearer ' . $this->OAuthAccessToken,
];
}
Nun ist der seltsame Teil, dass der erste Test testRegisterSuccess
läuft perfekt und gibt die Antwort, die ich erwarte. Aber die zweiten testRegisterMissingParams
, obwohl es die gleiche Strecke ist, gibt diese,
array:2 [
"message" => "The version given was unknown or has no registered routes."
"status_code" => 400
]
verfolgen ich den Fehler, und es ist in den Laravel adapter
hier:
public function dispatch(Request $request, $version)
{
// it seems that the second time around can't find any routes with the key 'v1'
if (! isset($this->routes[$version])) {
throw new UnknownVersionException;
}
$routes = $this->mergeExistingRoutes($this->routes[$version]);
$this->router->setRoutes($routes);
return $this->router->dispatch($request);
}
Und weiter mehr, wenn ich einen Lauf Test zu einem Zeitpunkt (z. B. einen kommentieren, Test ausführen und dann den anderen kommentieren und Test ausführen) Ich sehe das Ergebnis in beiden Tests erwartet. Das Problem ist, wenn ich mehrere Tests ausführen.
Irgendwelche Gedanken dazu?
Vielen Dank!
Hallo, danke für die Antwort. Ja, die URLs funktionieren perfekt, wenn ich sie mit Postman oder Paw versuche. Die eigentliche API funktioniert einwandfrei. Das Problem liegt beim Testen. – musicvicious