2014-02-24 1 views
2

안녕하세요, PHPUnit 및 Laravel 4를 처음 사용했습니다. REST API를 만들었으며 laravel (PHPUnit) 단위 테스트를 사용하여 새 사용자를 추가하려고합니다. 내 테스트 DB. 문제는 그것이 내가 사용자 문서 작성을 사용하여 추가하려고하는 Object 배열을 완전히 무시한다는 것입니다. 로 보일 것이다Laravel Unit MongoDB 및 객체 배열을 이용한 테스트

일반적인 사용자 문서는 다음과 같습니다

{ 
    _id": ObjectId("53021089b4d15220118b4568"), 
    "oArr": { 
    "something": { 
      "somewhere": "5th Avenue", 
      "ip": "192.168.0.20" 
    }, 
    "something2": { 
      "somewhere": "6th Avenue", 
      "ip": "192.168.0.21" 
    } 
    } 
    "email": "[email protected]", 
    "name": "Jessica Alba", 
    "password": "$2y$10$RAVzUGLAG.81IOOUum0k0u5vrcY98H.L42FeSJekEywUCV.ycttn6" 
} 

이제 Laravel이 당신의 단위 테스트가 확장 자신의 테스트 클래스 TestCase입니다 있습니다. 나는 아무 생각하는 방법이 없습니다

{ 
    _id": ObjectId("53021089b4d15220118b4568"), 
    "email": "[email protected]", 
    "name": "Emma Watson", 
    "password": "$2y$10$asdAzUGLAG.8asvWQOUum0k0u5vrcY98H.LEDeSJekEywUCV.ycttn6" 
} 

을 : 사용자 테스트 (성공적으로) 실행되면

class AddUserTest extends TestCase { 

    /** 
    * A basic functional test example. 
    * 
    * @return void 
    */ 


    public function testCreateUsers() 
    { 
     $post_data = array(
      'email' => '[email protected]', 
      'name' => 'Emma Watson', 
      'password' => 'password', 
      'oArr' => array(
       'something' => array(
        'somewhere' => '7th Avenue', 
        'ip' : => '192.168.0.31' 
      ), 
     ), 
    ); 
    } 
} 

, 새로운 엠마 왓슨 사용자 (몽고 문서)로 보면 다음과 : 전형적인 예는 다음과 같은 것 , 같은 문제가있는 다른 사람을 찾을 수 없었습니다.

가정 : 내가 사용하고있는 ORM (https://github.com/jenssegers/Laravel-MongoDB)은 단위 테스트의 개체 배열을 처리하지 않습니다.

나는 ORM이 단위 테스트를 처리하는 방법을 아직 보지 못했지만, 나는 다른 누군가가 똑같은 문제를 가지고 있고 더 기본적인 해결책을 가지고 있기를 기대하고있다.

답변

2

이 게시물을 완전히 잊어 버렸습니다.
Laravel의 Input JSON 입력에 대한 클래스 핸들도 있습니다. 따라서 임베디드 문서를 게시하려는 경우 JSON 형식으로 작업 할 수도 있습니다. 다음은 나를 위해 일했습니다.

class AddUserTest extends TestCase { 

    /** 
    * A basic functional test example. 
    * 
    * @return void 
    */ 


    public function testCreateUsers() 
    { 
     $post_data = array(
      'email' => '[email protected]', 
      'name' => 'Emma Watson', 
      'password' => 'password', 
      'oArr' => array(
       'something' => array(
        'somewhere' => '7th Avenue', 
        'ip' : => '192.168.0.31' 
      ), 
     ), 
    ); 
     $post_data = json_encode($post_data); 
     // Send through the serialized data to the Controller. 
    } 
} 
2

글쎄, 테스트 결과 수정 된 문서가 반환되었습니다. Mongodb은 모든 삽입에 자동으로 _id을 새로 추가합니다.이 삽입은 명시 적으로 업데이트으로 표시되지 않습니다. 또한 mongo가 암호 해싱을하고 있습니다. 아마도 패키지 드라이버가 수행 할 것입니다. mongodb가 중첩 된 문서를 사용하고 있기 때문에 중첩 된 수준에 도달하지 못했을 가능성이 있으며 해당 문서가 없습니다.

+0

이 경우 해시는 API 프레임 워크 (Laravel)에서 수행됩니다. Mongo에 들어가기 전에 모든 정보가 준비되고 포맷되어 있습니다. –