您好,我对 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/