dingo/api 0.10.0
、Laravel 5.1
およびを使用して API を作成しましたlucadegasperi/oauth2-server-laravel": "^5.1"
。
私のルートはすべて Postman/Paw で正常に動作します!
を使用して API をテストしようとすると、問題が発生しますPHPUnit
。
これは私のroute-api.php
ファイルの一部です
<?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\UserController@register');
});
そして、これは私のテストファイル 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);
}
}
ApiTestCase は、トークンを取得してヘッダーを設定するだけです。
private function setHeaders()
{
$this->headers = [
'Accept' => 'application/vnd.yps.v1+json',
'Authorization' => 'Bearer ' . $this->OAuthAccessToken,
];
}
さて、奇妙な部分は、最初のテストtestRegisterSuccess
が完全に実行され、期待どおりの応答が返されることです。しかし、2 番目testRegisterMissingParams
のものは、同じルートであるにもかかわらず、これを返します。
array:2 [
"message" => "The version given was unknown or has no registered routes."
"status_code" => 400
]
エラーを追跡しましたが、Laravel adapter
ここにあります:
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);
}
さらに、一度に 1 つのテストを実行すると (たとえば、一方をコメントアウトしてテストを実行し、もう一方をコメントしてテストを実行すると)、両方のテストで予想される結果が表示されます。問題は、複数のテストを実行するときです。
それについて何か考えはありますか?
ありがとうございました!