Php 使用MongoDB和对象阵列进行Laravel单元测试
你好,我对PHPUnit和Laravel 4还很陌生。 我已经创建了一个RESTAPI,并试图使用laravel(PHPUnit)单元测试将一个新用户添加到我的测试数据库中。问题是,它完全忽略了我试图在创建用户文档时添加的对象数组 典型的用户文档如下所示:Php 使用MongoDB和对象阵列进行Laravel单元测试,php,mongodb,unit-testing,laravel,Php,Mongodb,Unit Testing,Laravel,你好,我对PHPUnit和Laravel 4还很陌生。 我已经创建了一个RESTAPI,并试图使用laravel(PHPUnit)单元测试将一个新用户添加到我的测试数据库中。问题是,它完全忽略了我试图在创建用户文档时添加的对象数组 典型的用户文档如下所示: { _id": ObjectId("53021089b4d15220118b4568"), "oArr": { "something": { "somewhere": "5th Avenue",
{
_id": ObjectId("53021089b4d15220118b4568"),
"oArr": {
"something": {
"somewhere": "5th Avenue",
"ip": "192.168.0.20"
},
"something2": {
"somewhere": "6th Avenue",
"ip": "192.168.0.21"
}
}
"email": "jessica@example.com",
"name": "Jessica Alba",
"password": "$2y$10$RAVzUGLAG.81IOOUum0k0u5vrcY98H.L42FeSJekEywUCV.ycttn6"
}
{
_id": ObjectId("53021089b4d15220118b4568"),
"email": "emma@example.com",
"name": "Emma Watson",
"password": "$2y$10$asdAzUGLAG.8asvWQOUum0k0u5vrcY98H.LEDeSJekEywUCV.ycttn6"
}
现在,Laravel有了自己的测试类TestCase
,您的单元测试可以扩展它。
典型示例如下:
class AddUserTest extends TestCase {
/**
* A basic functional test example.
*
* @return void
*/
public function testCreateUsers()
{
$post_data = array(
'email' => 'emma@example.com',
'name' => 'Emma Watson',
'password' => 'password',
'oArr' => array(
'something' => array(
'somewhere' => '7th Avenue',
'ip' : => '192.168.0.31'
),
),
);
}
}
一旦用户测试成功运行,新的Emma Watson用户(Mongo Doc)如下所示:
{
_id": ObjectId("53021089b4d15220118b4568"),
"oArr": {
"something": {
"somewhere": "5th Avenue",
"ip": "192.168.0.20"
},
"something2": {
"somewhere": "6th Avenue",
"ip": "192.168.0.21"
}
}
"email": "jessica@example.com",
"name": "Jessica Alba",
"password": "$2y$10$RAVzUGLAG.81IOOUum0k0u5vrcY98H.L42FeSJekEywUCV.ycttn6"
}
{
_id": ObjectId("53021089b4d15220118b4568"),
"email": "emma@example.com",
"name": "Emma Watson",
"password": "$2y$10$asdAzUGLAG.8asvWQOUum0k0u5vrcY98H.LEDeSJekEywUCV.ycttn6"
}
我不知道怎么做,也找不到其他有同样问题的人
我的假设:我使用的ORM()不适合单元测试中的对象数组
我还没有研究ORM是如何处理单元测试的,我只是希望其他人也有同样的问题,并且有一个更基本的解决方案。好吧,您的测试返回了修改过的文档。Mongodb会自动将新的\u id附加到未明确标记为更新的每个插入中。此外,mongo正在对您的密码进行哈希运算——这可能是由您的包驱动程序完成的。因为mongodb使用的是嵌套文档,所以您的测试可能没有达到该嵌套级别,并且没有该文档。好的,您的测试返回了修改过的文档。Mongodb会自动将新的\u id附加到未明确标记为更新的每个插入中。此外,mongo正在对您的密码进行哈希运算——这可能是由您的包驱动程序完成的。由于mongodb正在使用嵌套文档,您的测试可能没有达到该嵌套级别,并且没有该文档。完全忘记了这篇文章。
Laravel的
Input
类也处理JSON输入。因此,如果您试图发布嵌入的文档,不妨使用JSON格式。以下几点对我有用
class AddUserTest extends TestCase {
/**
* A basic functional test example.
*
* @return void
*/
public function testCreateUsers()
{
$post_data = array(
'email' => 'emma@example.com',
'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.
}
}
完全忘记了这篇文章。
Laravel的
Input
类也处理JSON输入。因此,如果您试图发布嵌入的文档,不妨使用JSON格式。以下几点对我有用
class AddUserTest extends TestCase {
/**
* A basic functional test example.
*
* @return void
*/
public function testCreateUsers()
{
$post_data = array(
'email' => 'emma@example.com',
'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.
}
}
在本例中,哈希由API框架(Laravel)完成。所有信息在放入Mongo之前都已准备好并格式化。在本例中,哈希是由API框架(Laravel)完成的。所有信息在放入Mongo之前都已准备好并格式化。