2014-02-24 37 views
2

Hello您好,我对PHPUnit和Laravel 4很新。 我创建了一个REST API,并且正在尝试使用laravel(PHPUnit)单元测试添加一个新用户,以我的测试数据库。问题是,它完全忽略了我试图添加用户文档创建的Object数组。使用MongoDB和对象数组进行Laravel单元测试

典型用户文件将如下所示:

{ 
    _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,你的单元测试扩展。 典型的例子是以下几点:

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' 
      ), 
     ), 
    ); 
    } 
} 

一旦用户测试已运行(成功),新的艾玛·沃特森的用户(蒙戈文件)如下所示:

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

我不知道如何,并找不到其他人有同样的问题。

我的假设:我正在使用的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之前已准备就绪并已格式化。 –

相关问题