json - 单元测试 Laravel 需要有关如何正确传递我的变量的帮助

标签 json laravel unit-testing testing

因此,我开始进行单元测试,并创建了一个用于在我的数据库中创建和调整行的测试。这是代码:

        $response = $this->json('POST', '/quotes/3/adjustment',
               [
                    'adjustments' => array([
                        'description'   => 'TEST-Description',
                        'amount'        => 1000,
                        'quote_id'      => 3
                    ])
                ]
    );
    $response->assertStatus(201);

当创建它时,我的 Controller 会创建一个调整模型的实例,在该模型中,我有用于创建它的代码:

            foreach($request->adjustments as $adjustment) {
            if(array_key_exists('id', $adjustment)) {
                $this->find($adjustment['id'])->update([
                    'description'   => $adjustment['description'],
                    'amount'        => $adjustment['amount'],
                    'quote_id'      => $quote->id
                ]);
            } else {
                $this->create([
                    'description'   => $adjustment['description'],
                    'amount'        => $adjustment['amount'],
                    'quote_id'      => $quote->id,
                ]);
            }
        }
        return $quote;

所以它期望调整是一个数组,我认为我在测试中对它进行了正确编码,但我得到了 200 响应,这不是预期的 201。关于如何正确传递我的测试文件中的单个数组以使其通过测试的任何想法?

这是我的 Controller :

        $adjustment = new Adjustment();
    return $adjustment->newAdjustment($quote, $request)->adjustments;

附带说明一下,如果我在 postman 中将其作为原始 JSON(applicatoin/json) 运行,它会在数据库中创建资源:

{
"adjustments": [{
        "description": "testing-postman",
        "amount": 1000,
        "quote_id": 1
}
    ]

最佳答案

从 Laravel 5.6 开始,如果您从 Controller 返回一个新创建的模型,Laravel 会自动将响应状态设置为 201。这通常是您在构建遵循 RESTful 实践的 API 时会做的事情。

然而,这可能不适合您的情况,因为您可能需要从 Controller 返回其他数据,而不仅仅是新创建的模型,如果是这样,我相信 Laravel 会返回 200

所以你有几个选择:

  • 在您的 Controller 中,您可以使用 return response($myData, 201);
  • 强制返回 201
  • 仅返回新创建的模型,不返回任何其他内容。
  • 或者让您的测试执行以下操作:
    • $response->assertStatus(200);
    • $this->assertDatabaseHas('调整', $adjustment->toArray());

对于第三个选项,您的测试正在验证一切正常,并且实际模型已创建并存在于数据库中(您需要根据需要调整它)。

关于json - 单元测试 Laravel 需要有关如何正确传递我的变量的帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53672424/

相关文章:

json - 使用 azure 突触分析时在架构推理中检测到格式错误的记录

php - 轮询器中的 Laravel 和 AJAX 偶发 401 错误

php - Laravel 错误不起作用

node.js - 涉及数据库的测试

Angular 测试在初始化前无法访问服务

unit-testing - 如何对使用 Express + Mongoose 构建的 NodeJs REST API 服务器进行单元测试?

Python JSON try except block 不起作用

java - 快速解析Java中与数组混合的深层json对象

javascript - 字符串到 JSON 对象

php - 从 Laravel 下拉表单获取值