如何在单元测试中将对象作为参数传递? (laravel)

How to pass an object as parameter in unit test? (laravel)

我在下面有一个数据对象,我尝试使用邮递员对其进行测试。我只是不知道如何在 laravel 的单元测试中实现这一点。我已经访问过这个 link 但它对我的情况没有帮助。

{
    "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]);

如您在 Laravel docs for HTTP tests 中所见,您可以发送一个 php 数组,如下所示:

$payload = [
    "user_id" => 1,
    "name" => "juan",
    "address" => [
        "state" => "Auckland",
        "country" => "New Zealand",
    ],
];


$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知道识别的数组