开发者社区 问答 正文

assertJson()用于Laravel中的JSON数组

我正在从此页面为Laravel重新创建一个简单的api:https ://www.toptal.com/laravel/restful-laravel-api-tutorial?utm_campaign = blog_post_restful_laravel_api_tutorial&utm_medium = email&utm_source = blog_subscribers

在测试阶段,我正在忙于中的testArticlesAreListedCorrectly()功能问题ArticleTest.php。该代码在页面中并不完美,就像我必须更改为jsonAssert()才能jsonAssertFragment()使测试正常进行一样。但是在响应中声明多个Json数组似乎很困难,并且显示错误。有没有一种方法可以同时对两个数组使用JsonFragment,同时检查它们是否正确列出?

{

    factory(Article::class)->create([
        'title' => 'First Article',
        'body' => 'First Body'
    ]);

    factory(Article::class)->create([
        'title' => 'Second Article',
        'body' => 'Second Body'
    ]);

    $user = factory(User::class)->create();
    $token = $user->generateToken();
    $headers = ['Authorization' => "Bearer $token"];

    $response = $this->json('GET','/api/articles', [], $headers)
        ->assertStatus(200)
        ->assertJson([
            ['title' => 'First Article', 'body' => 'First Body'],
            ['title' => 'Second Article', 'body' => 'Second Body']
        ])
        ->assertJsonStructure([
            '*' => ['id', 'body', 'title', 'created_at', 'updated_at'],
        ]);
}

错误:


Time: 23.53 seconds, Memory: 28.00 MB

There was 1 failure:

1) Tests\Feature\ArticleTest::testArticlesAreListedCorrectly
Unable to find JSON: 

[[
    {
        "title": "First Article",
        "body": "First Body"
    },
    {
        "title": "Second Article",
        "body": "Second Body"
    }
]]

within response JSON:

[[

        "id": 51,
        "title": "First Article",
        "body": "First Body",
        "created_at": "2019-11-27 06:01:13",
        "updated_at": "2019-11-27 06:01:13"
    },
    {
        "id": 52,
        "title": "Second Article",
        "body": "Second Body",
        "created_at": "2019-11-27 06:01:13",
        "updated_at": "2019-11-27 06:01:13"
    }
]].


Failed asserting that an array has the subset Array &0 (
    0 => Array &1 (
        'title' => 'First Article'
        'body' => 'First Body'
    )
    1 => Array &2 (
        'title' => 'Second Article'
        'body' => 'Second Body'
    )
).
--- Expected
+++ Actual
@@ @@
   0 => 
   array (
     'id' => 1,
-    'title' => 'First Article',
-    'body' => 'First Body',
+    'title' => 'Modi distinctio officiis similique quis ut suscipit facilis.',
+    'body' => 'Reiciendis iste beatae rerum dolore nesciunt ullam est. Accusamus autem eaque nihil voluptates suscipit incidunt. Et voluptas voluptas non sint.',
     'created_at' => '2019-11-27 06:01:12',
     'updated_at' => '2019-11-27 06:01:12',
   ),
@@ @@
   1 => 
   array (
     'id' => 2,
-    'title' => 'Second Article',
-    'body' => 'Second Body',
+    'title' => 'Suscipit soluta rerum officia voluptatem sint ducimus.',
+    'body' => 'Ut dolor dolorem voluptas sint et alias. Dolores ipsa quasi nisi enim aperiam tenetur. Sed expedita sit impedit at eius quod. Dolore eaque officiis vero consequuntur sit.',
     'created_at' => '2019-11-27 06:01:12',
     'updated_at' => '2019-11-27 06:01:12',
   ),```

Any idea how I can run this test?

展开
收起
社区秘书 2019-11-27 16:30:58 699 分享 版权
阿里云 AI 助理回答

根据您的需求,您希望在阿里云环境中为Laravel项目重新创建一个简单的RESTful API。参照给出的知识库资料,以下是详细的步骤指南:

1. 准备工作

  • 确保环境:您应已有一个运行中的Laravel应用,并且熟悉其基本结构和路由配置。
  • 登录阿里云:访问阿里云控制台并登录您的账号。

2. 创建后端服务

  1. 导航至API网关:在阿里云控制台,选择“API管理”下的“后端服务”,进入后端服务列表页面。
  2. 创建HTTP后端服务:点击“创建后端服务”,选择HTTP类型(确认您的区域支持此类型),填写必要的信息如名称、描述等,并完成创建过程。

3. 配置后端地址

  1. 定义环境地址:在创建的后端服务下,选择“配置及关联的API”,针对测试、预发、线上等不同环境,分别配置后端服务地址指向您的Laravel应用的实际URL。

4. 创建REST API

  1. 导航至API创建页面:在API管理菜单中,选择“API”,然后点击“创建API”,选择REST API并点击“创建”。
  2. 配置API参数
    • API名称:输入全局唯一的API名称。
    • 协议:选择HTTP或HTTPS。
    • Base Path:设定API的基本路径,例如/api/v1
    • 版本管理(可选):根据需要启用版本管理,并设置版本号及使用方式(Query, Header, 或Path)。

5. 定义API接口

  1. 定义请求参数:根据Laravel应用的路由设计,在API网关中配置请求的入参,包括PATH、QUERY、BODY等参数,以及相应的校验规则。
  2. 映射后端服务:在API配置中,选择之前创建的后端服务,并设定后端Path、HTTP Method等,确保与Laravel应用的路由相匹配。同时,配置参数映射以保证前后端数据传递的一致性。

6. 测试与发布

  1. API调试:利用API网关提供的调试工具,对新创建的API进行调用测试,确保一切功能正常。
  2. 发布API:测试无误后,将API发布到预发或生产环境,使其对外可用。

注意事项

  • 确认您的Laravel应用网络配置允许来自阿里云API网关的请求。
  • 在配置后端服务时,注意海外region及中国香港不支持新建HTTP/OSS类型后端服务。
  • 版本管理和参数校验可根据实际需求灵活配置,以提升API的管理和安全性。

通过以上步骤,您可以在阿里云上基于现有Laravel应用重新创建并配置一个RESTful API,实现与原有应用逻辑的无缝对接。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答
问答分类:
问答地址: