2016-04-07 18 views
2

officiel docに続いてJSON APIをテストしようとしています。私は問題がPOST要求に与えられたデータ配列から来ていることを知っています。テストは['hello' => 'world']のような単一レベルの配列でうまくいくので、明らかにpost関数は複雑な構造を扱うことができません。私はここで間違って何をしていますか?Laravel 5 PHPUnitテストjson投稿

テスト:

public function testInsert() 
{ 
    $this->post(
     '/test', 
     [ 
      'content' => 'Hello world!', 
      'count' => [ 
       'a' => 12.345678, 
       'b' => 12.345678 
      ], 
      'user' => [ 
       'id' => 1 
      ] 
     ], 
     ['contentType' => 'application/json'] 
    )->seeJsonEquals([ 
     'status' => true 
    ]); 
} 

エラー:

unknown:myapp nobody$ phpunit 
PHPUnit 4.8.24 by Sebastian Bergmann and contributors. 

E. 

Time: 648 ms, Memory: 15.25Mb 

There was 1 error: 

1) APITest::testInsert 
ErrorException: Invalid argument supplied for foreach() 

/Users/nobody/myapp/vendor/laravel/framework/src/Illuminate/Support/Arr.php:487 
/Users/nobody/myapp/vendor/laravel/framework/src/Illuminate/Foundation/Testing/Concerns/MakesHttpRequests.php:231 
/Users/nobody/myapp/tests/APITest.php:43 

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

コントローラ:私はlaravel new myappコマンドを使用して、私のLaravelアプリケーションを再インストールし、すべてが今、正常に動作し

public function store() { 
    $user = User::find(Input::get('user.id')); 

    // TODO: Validate input using JSON schema 

    if (empty($user)) 
     $errors[] = 'User does not exist.'; 

    if (empty(Input::get('content'))) 
     $errors[] = 'Content is empty.'; 

    $a = Input::get('location.latitude'); 
    if ($a < 15) 
     $errors[] = 'A out of range.'; 

    $b = Input::get('location.longitude'); 
    if ($b < 20) 
     $errors[] = 'B out of range.'; 

    if (empty($errors)) { 
     $post = new Post(); 

     $post->content = Input::get('content'); 
     $post->count()->create([ 
      'a' => $a, 
      'b' => $b 
     ]); 

     $user->posts()->save($user); 

     $post->save(); 

     return APIUtils::makeStatusResponse(true); 
    } 

    return APIUtils::makeStatusResponse(false, $errors); 
} 
+0

コントローラメソッドも投稿してください。 –

答えて

0

。私は問題が前のインストールで行われたと仮定していますcomposer create-project --prefer-dist laravel/laravel mayで作られた。