日期: 2022年4月27日

  • 在 Laravel 6、LightHouse 5、PHPUnit 中编写测试 Mutation,删除缓存中的数据实现

    在 Laravel 6、LightHouse 5、PHPUnit 中编写测试 Mutation,删除缓存中的数据实现

    1、在程序实现中,先请求 API,生成缓存标识。然后再请求 API,删除缓存标识。如图1
    在程序实现中,先请求 API,生成缓存标识。然后再请求 API,删除缓存标识。
    图1
    2、如果要在测试中通过,前提是必须存在一个明确的缓存标识,以用于删除请求的参数。 3、参考网址:https://learnku.com/laravel/t/22690 。使用 TDD 测试驱动开发来构建 Laravel REST API。测试删除路由,其是先直接操作数据库,生成一条记录,然后再调用 HTTP API,测试删除操作。
    
    
    // 测试删除路由
    public function testDelete(){
        $token = $this->authenticate();
        $recipe = Recipe::create([
            'title' => 'Jollof Rice',
            'procedure' => 'Parboil rice, get pepper and mix, and some spice and serve!'
        ]);
        $this->user->recipes()->save($recipe);
        $response = $this->withHeaders([
            'Authorization' => 'Bearer '. $token,
        ])->json('POST',route('recipe.delete',['recipe' => $recipe->id]));
        $response->assertStatus(200);
        // 断言没有食谱
        $this->assertEquals(0,$this->user->recipes()->count());
    }
    
    
    
    
    4、因此,决定也如此设计。先直接操作缓存,生成对应的缓存标识,然后再执行 HTTP API 请求测试。
    
    
    
        public function testDeleteThemeEditorCode(): void
        {
            $random = Str::random(36);
            $value = [
                'theme_id' => 'vogue'
            ];
            Cache::tags([ThemeEditorResolver::TAG_THEME_EDITOR, ThemeEditorResolver::TAG_THEME_EDITOR_CODE])->put($random, $value, 86400);
    
            $response = $this->graphQL('
                mutation DeleteThemeEditorCode($themeEditorCode: String!) {
                    onlineStoreThemeEditorCodeDelete(themeEditorCode: $themeEditorCode) {
                        deletedThemeEditorCode
                    }
                }
            ', [
                'themeEditorCode' => $random,
            ]);
    
            $response->assertJson(
                [
                    'data' => [
                        'onlineStoreThemeEditorCodeDelete' => [
                            'deletedThemeEditorCode' => $random
                        ],
                    ],
                ]
            );
        }
    
    
    
    
    5、运行测试,测试通过。如图2
    运行测试,测试通过
    图2
    
    
    PS E:\wwwroot\object> .\vendor\bin\phpunit .\Modules\ThemeStore\Tests\Functional\GraphQl\ThemeEditorGraphQlApiTest.php
    PHPUnit 7.5.20 by Sebastian Bergmann and contributors.
    
    ..                                                                  2 / 2 (100%)
    
    Time: 1.31 seconds, Memory: 72.00 MB
    
    OK (2 tests, 4 assertions)