Php 如何在单元测试中传递对象作为参数?(拉雷维尔)

Php 如何在单元测试中传递对象作为参数?(拉雷维尔),php,laravel,unit-testing,laravel-unit-test,Php,Laravel,Unit Testing,Laravel Unit Test,我在下面有一个数据对象,我试图使用postman进行测试。我只是不知道如何在laravel的单元测试中实现这一点。我访问过这个网站,但对我的情况没有帮助 { "user_id": 1, "name": "juan", "address": [ "state": "Auckland", "country"

我在下面有一个数据对象,我试图使用postman进行测试。我只是不知道如何在laravel的单元测试中实现这一点。我访问过这个网站,但对我的情况没有帮助

{
    "user_id": 1,
    "name": "juan",
    "address": [
        "state": "Auckland",
        "country": "New Zealand",
    ],
    "school": [
        {
            "school_name": "Kristin School",
            "year": 2016
        },
        {
            "school_name": "ACG Parnell College",
            "year": 2018
        },
    ],
    // and more...
}
在单元测试中,我们如何通过上述对象?有没有办法做到这一点

$response = $this->post('/logbooks/user', ['Authorization': 'Bearer' + $token]);
如中所示,您可以发送一个php数组,如下所示:

$payload=[
“用户id”=>1,
“姓名”=>“胡安”,
“地址”=>[
“州”=>“奥克兰”,
“国家”=>“新西兰”,
],
];
$response=$this->postJson(
“/logbooks/user”,$payload,['Authorization':'Bearer'+$token]
);
它接受php
$payload
数组并将其编码为JSON并发送。 如果您有一个对象,您可以使用中的
$myArray=(array)$myObject

强制转换它,您可以发送一个php数组,如下所示:

$payload=[
“用户id”=>1,
“姓名”=>“胡安”,
“地址”=>[
“州”=>“奥克兰”,
“国家”=>“新西兰”,
],
];
$response=$this->postJson(
“/logbooks/user”,$payload,['Authorization':'Bearer'+$token]
);
它接受php
$payload
数组并将其编码为JSON并发送。
如果您有一个对象,您可以使用
$myArray=(array)$myObject

强制转换它,首先要知道这样的测试不是“单元测试”类型。 请注意,代码将运行,您应该注意运行代码可能需要的更改(更新数据库中的数据,联系外部提供商)

当然,所有这些都可以被嘲笑,建议您仔细阅读

class FooTest extends TestCase {
 public function testBar()
 {
   $response = $this->post('/api/v1/yourapi', 
           [
            "user_id" => 1, 
            "name" => "juan", 
            "address" => [
            "state" => "Auckland", 
            "country" => "New Zealand" 
             ], 
            "school" => [
              [
               "school_name" => "Kristin School", 
               "year" => 2016 
            ], 
            [
                  "school_name" => "ACG Parnell College", 
                  "year" => 2018 
               ] 
         ] 
]);
    $response->assertStatus(200);
    $response->assertJsonStructure([...]);

    $response->assert....();
 }
}
正如我在下面的评论中所写,您附加的JSON无效。 您将数组视为对象,添加了不必要的逗号


建议使用IDE知道要识别的数组,首先要知道这样的测试不是“单元测试”类型。 请注意,代码将运行,您应该注意运行代码可能需要的更改(更新数据库中的数据,联系外部提供商)

当然,所有这些都可以被嘲笑,建议您仔细阅读

class FooTest extends TestCase {
 public function testBar()
 {
   $response = $this->post('/api/v1/yourapi', 
           [
            "user_id" => 1, 
            "name" => "juan", 
            "address" => [
            "state" => "Auckland", 
            "country" => "New Zealand" 
             ], 
            "school" => [
              [
               "school_name" => "Kristin School", 
               "year" => 2016 
            ], 
            [
                  "school_name" => "ACG Parnell College", 
                  "year" => 2018 
               ] 
         ] 
]);
    $response->assertStatus(200);
    $response->assertJsonStructure([...]);

    $response->assert....();
 }
}
正如我在下面的评论中所写,您附加的JSON无效。 您将数组视为对象,添加了不必要的逗号


建议使用IDE知道可以识别的数组

我忘了一些东西,您可以再次检查我的数据对象(有效负载)以通过,我更新了问题描述您输入的JSON无效,一个附件是正确的:
{“user_id”:1,“name”:“juan”,“address”:{“state”:“Auckland”,“country”:“新西兰”},“学校”:[{“学校名称”:“克里斯汀学校”,“年份”:2016},{“学校名称”:“ACG帕内尔学院”,“年份”:2018}]}
也更改了我的回答我忘了一些东西,你能再次检查我的数据对象(有效载荷)通过吗,我更新了问题描述您输入的JSON无效,有一个附件是正确的:
{“user_id”:1,“name”:“juan”,“address”:{“state”:“Auckland”,“country”:“New zeland”},“school”:[{“school_name”:“Kristin school”,“year”:2016},{“school_name”:“ACG Parnell College”,“year:2018}]}
也改变了我的回答我发现我们使用的是“+”运算符,应该是句点。谢谢:)我发现我们使用的是“+”运算符,应该是句点。谢谢:)