2016-07-17 31 views
1

laravelでAPIのテストを作成する際に問題があります。私[email protected]はこのようになりますが(私は郵便配達してテストし、それが正常に動作します)Laravel json APIのphpunitでテストを書く

Route::group(['middleware' =>'api', 'prefix' => '/api/v1', 'namespace' => 'Api\V1'], function() { 


    Route::post('/login', 'Auth\[email protected]'); 

    Route::group(['middleware' =>'jwt.auth'], function() { 
     Route::post('/projects', '[email protected]'); 
     ... 
    }); 

}); 

:ここではどのように私のroutes.phpを見て

public function postProjects() { 
    $project = new Project; 
    $project->fill(request()->all()); 
    $project->user_id = Auth::user()->id; 
    $project->save(); 
    return ['project_id' => $project->id]; 
} 

私はJWTのクッキーを使用して、認証のために自分のmiddelwareを書くいます詳細は hereに記載されている。しかし、私のテストでは、私はミドルウェア()をオフにして、ログインユーザ( actingAs($user) - 自分のDBにユーザ(ID = 1)がある)として動作させようとします。私のテストは、(私は this documentationを使用して、それを書いた)のようになります。

<?php 

use Illuminate\Foundation\Testing\WithoutMiddleware; 
use Illuminate\Foundation\Testing\DatabaseMigrations; 
use Illuminate\Foundation\Testing\DatabaseTransactions; 
use App\Models\User; 

class ProjectsTest extends TestCase 
{ 
    use WithoutMiddleware; 

    /** 
    * A basic functional test example. 
    * 
    * @return void 
    */ 
    public function testBasicExample() 
    { 

     $user = User::find(1); 

     $this->actingAs($user) 
       ->json('POST', '/projects', ['name' => 'Project_test_name' ]) 
       ->seeJson([ 
       'project_id' => 1, 
      ]); // THIS IS LINE 26 
    } 
} 

しかし、私はvendor/bin/phpunitの実行中に次のエラーを取得する:

Time: 182 ms, Memory: 13.75MB

There was 1 error:

1) ProjectsTest::testBasicExample ErrorException: Invalid argument supplied for foreach()

/Users/Kamil/Desktop/Code/kumarajiva.com/vendor/laravel/framework/src/Illuminate/Support/Arr.php:494 /Users/Kamil/Desktop/Code/kumarajiva.com/vendor/laravel/framework/src/Illuminate/Foundation/Testing/Concerns/MakesHttpRequests.php:232 /Users/Kamil/Desktop/Code/kumarajiva.com/vendor/laravel/framework/src/Illuminate/Foundation/Testing/Concerns/MakesHttpRequests.php:257 /Users/Kamil/Desktop/Code/kumarajiva.com/tests/ProjectsTest.php:26

FAILURES! Tests: 2, Assertions: 2, Errors: 1.

任意のアイデアこのエラーをどうしますか?

答えて

2

同じエラーが発生しました。その後、問題が判明しました。サーバーはJSONを返さず、「Unauthorized」エラーを返しました。 JSONがエラーをスローすると、レスポンスを解析しようとしています。

seeJson()の代わりにdump()を追加して、応答が何であるかを確認してください。

+0

大変ありがとうございます! Te - > dump()は非常に便利です:)。私は些細な間違いを犯しました - 私はテストでapi/v1プレフィックスを忘れていました: ' - > json( 'POST'、 'api/v1/projects' ...' –

関連する問題