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/wshop/platform> ./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)
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/tech/webdev/250763.html
