php - 使用 MongoDB 和对象数组进行 Laravel 单元测试

标签 php mongodb unit-testing laravel

您好,我对 PHPUnit 和 Laravel 4 还很陌生。 我创建了一个 REST API,并尝试使用 laravel (PHPUnit) 单元测试将新用户添加到我的测试数据库中。问题是,它完全忽略了我尝试在创建用户文档时添加的对象数组。

典型的用户文档如下所示:

{
    _id": ObjectId("53021089b4d15220118b4568"),
   "oArr": {
     "something": {
          "somewhere": "5th Avenue",
          "ip": "192.168.0.20"
     },
     "something2": {
          "somewhere": "6th Avenue",
          "ip": "192.168.0.21"
     }
  }
   "email": "<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="6b010e181802080a2b0e130a061b070e45080406" rel="noreferrer noopener nofollow">[email protected]</a>",
   "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' => '<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="b9dcd4d4d8f9dcc1d8d4c9d5dc97dad6d4" rel="noreferrer noopener nofollow">[email protected]</a>',
          'name' => 'Emma Watson',
          'password' => 'password',
          'oArr' => array(
              'something' => array(
                  'somewhere' => '7th Avenue',
                  'ip' : => '192.168.0.31'
              ),
          ),
      );
    }
}

用户测试运行(成功)后,新的 Emma Watson 用户 (Mongo Doc) 如下所示:

{
    _id": ObjectId("53021089b4d15220118b4568"),
   "email": "<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="debbb3b3bf9ebba6bfb3aeb2bbf0bdb1b3" rel="noreferrer noopener nofollow">[email protected]</a>",
   "name": "Emma Watson",
   "password": "$2y$10$asdAzUGLAG.8asvWQOUum0k0u5vrcY98H.LEDeSJekEywUCV.ycttn6"
}

我不知道怎么做,也找不到其他有同样问题的人。

我的假设:我正在使用的 ORM ( https://github.com/jenssegers/Laravel-MongoDB ) 不适合单元测试中的对象数组。

我还没有研究 ORM 如何处理单元测试,我只是希望其他人也遇到过同样的问题,并且有一个更基本的解决方案。

最佳答案

好吧,您的测试返回了修改后的文档。 Mongodb 会自动将新的 _id 附加到每个插入,未明确标记为 更新。此外,mongo 还会对您的密码进行哈希处理 - 这可能是由您的软件包驱动程序完成的。由于 mongodb 使用嵌套文档,您的测试可能没有达到该嵌套级别,并且不存在该文档。

关于php - 使用 MongoDB 和对象数组进行 Laravel 单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21982662/

相关文章:

php - 将 MySQL 字符串数据清理为纯文本并修剪开始/结束空格的最佳方法?

mongodb - 为什么更新 MongoDB 中的 DateTime 会得到错误的值?

java - 如何验证 Mockito 中的所有方法调用?

node.js - 为什么多次调用 jest mockResolvedValueOnce 返回相同的值?

php - 现有卡的 Stripe 检查

php - 如何在没有上下文路径的情况下获取 php 请求 URI?

PHP 5.3 上的 php_pdo_informix

arrays - 如何在 mongodb 中更新多个数组元素

mongodb - 使用 mgo 从 golang 中的 Mongodb 中选择列

c# - 单元测试自定义属性类