繁体   English   中英

如何在单元测试中将 object 作为参数传递? (拉拉维尔)

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

我有一个数据 object 下面我尝试使用 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...
}

我们如何在单元测试中通过上面这样的object? 有什么办法可以做到这一点?

$response = $this->post('/logbooks/user', ['Authorization': 'Bearer' + $token]);

正如您在HTTP 测试的 Laravel 文档中找到的那样,您可以发送一个 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 并发送它。 如果你有一个 object 你可以用$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 无效。 您将数组视为 object,添加了不必要的逗号。

推荐使用IDE知道识别的阵列

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM