在 Laravel 6、LightHouse 5、PHPUnit 中编写测试 Mutation,删除缓存中的数据实现
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
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)
近期评论