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

1、在程序实现中,先请求 API,生成缓存标识。然后再请求 API,删除缓存标识。如图1

图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)
永夜