【问题标题】:How to pass an object as parameter in unit test? (laravel)如何在单元测试中将对象作为参数传递? (拉拉维尔)
【发布时间】:2021-05-23 23:40:27
【问题描述】:

下面有一个数据对象,我尝试使用邮递员进行测试。我只是不知道如何在 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]);

【问题讨论】:

    标签: php laravel unit-testing laravel-unit-test


    【解决方案1】:

    您可以在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 进行投射。

    【讨论】:

    • 我发现我们使用的是“+”运算符,应该是句号。谢谢:)
    【解决方案2】:

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

    当然,这一切都是可以mock的,建议大家仔细阅读。

    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": "New Zealand" }, "school": [ { "school_name": "Kristin School", "year": 2016 }, { "school_name": "ACG Parnell College", "year": 2018 } ] } 也改变了我的答案
    猜你喜欢
    • 2020-06-19
    • 1970-01-01
    • 1970-01-01
    • 2018-05-11
    • 1970-01-01
    • 2016-08-27
    • 1970-01-01
    • 1970-01-01
    • 2018-12-21
    相关资源
    最近更新 更多