测试
由于 EasyAdmin 基于 Symfony,您可以为管理页面添加功能测试,扩展 WebTestCase
类并使用 Symfony 功能测试工作流程。
然而,由于 EasyAdmin 使用特定的方式在其 CRUD 页面中显示数据,因此提供了一个自定义测试类:AbstractCrudTestCase
。该类基于定义自定义断言和助手的 traits。
功能测试用例示例
假设您有一个名为 App\Controller\Admin\AppDashboardController
的 仪表盘 和一个名为 App\Controller\Admin\CategoryCrudController
的 Category
Crud 控制器。这是一个该控制器的功能测试类示例。
首先,您的测试类需要扩展 AbstractCrudTestCase
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
# tests/Admin/Controller/CategoryCrudControllerTest.php
namespace App\Tests\Admin\Controller;
use App\Controller\Admin\AppDashboardController;
use App\Controller\Admin\CategoryCrudController;
use EasyCorp\Bundle\EasyAdminBundle\Test\AbstractCrudTestCase;
final class CategoryCrudControllerTest extends AbstractCrudTestCase
{
protected function getControllerFqcn(): string
{
return CategoryCrudController::class;
}
protected function getDashboardFqcn(): string
{
return AppDashboardController::class;
}
public function testIndexPage(): void
{
// this examples doesn't use security; in your application you may
// need to ensure that the user is logged before the test
$this->client->request("GET", $this->generateIndexUrl());
static::assertResponseIsSuccessful();
}
}
URL 生成
由 AbstractCrudTestCase
使用,CrudTestUrlGeneration
是一个 URL 生成 trait,它有助于生成 EasyAdmin URL 的特定部分。
注意
该 trait 可以单独使用,但在这种情况下,使用它的类需要
- 定义两个函数
getControllerFqcn()
和getDashboardFqcn()
- 将 DashboardFqcn(类名)和 ControllerFqcn(类名)作为输入添加到 URL 生成函数中
以下是 URL 生成函数的列表,所有这些函数都基于提供的仪表盘和控制器类名提供 URL
getCrudUrl()
:是允许完全生成所有可能选项的主要函数;generateIndexUrl()
:生成索引页面的 URL(基于定义的仪表盘和控制器);generateNewFormUrl()
:生成新建表单页面的 URL(基于定义的仪表盘和控制器);generateEditFormUrl()
:生成特定实体的编辑表单页面的 URL(基于定义的仪表盘和控制器以及实体 ID);generateDetailUrl()
:生成特定实体的详情页面的 URL(基于定义的仪表盘和控制器以及实体 ID);generateFilterRenderUrl()
:生成 URL 以获取过滤器渲染(基于定义的仪表盘和控制器)。
断言
由 AbstractCrudTestCase
使用,是两个 traits,其中填充了 EasyAdmin Web 测试的特定断言
CrudTestIndexAsserts
:为 EasyAdmin 的索引页面提供断言;CrudTestFormAsserts
:为 EasyAdmin 的表单页面提供断言。
注意
该 trait 可以单独使用,但在这种情况下,使用它的类需要同时具备
- 一个类属性
client
:Symfony\Bundle\FrameworkBundle\KernelBrowser
的实例 - 一个类属性
entitytManager
:Doctrine\ORM\EntityManagerInterface
的实例
CrudTestIndexAsserts
由于 EasyAdmin 使用特定的布局,这些断言的目标是通过提供链接到索引页面的特定断言来简化您测试 EasyAdmin 后端的方式。
提供以下断言
assertIndexFullEntityCount()
assertIndexPageEntityCount()
assertIndexPagesCount()
assertIndexEntityActionExists()
assertIndexEntityActionNotExists()
assertIndexEntityActionTextSame()
assertIndexEntityActionNotTextSame()
assertGlobalActionExists()
assertGlobalActionNotExists()
assertGlobalActionDisplays()
assertGlobalActionNotDisplays()
assertIndexColumnExists()
assertIndexColumnNotExists()
assertIndexColumnHeaderContains()
assertIndexColumnHeaderNotContains()
CrudTestFormAsserts
由于 EasyAdmin 使用特定的布局,这些断言的目标是通过提供链接到表单(新建或编辑)页面的特定断言来简化您测试 EasyAdmin 后端的方式。
提供以下断言
assertFormFieldExists()
assertFormFieldNotExists()
assertFormFieldHasLabel()
assertFormFieldNotHasLabel()
选择器助手
由断言使用以定位元素,Trait CrudTestSelectors
定义了链接到 EasyAdmin 布局特性的特定数量的选择器助手。
注意
该 trait 可以单独使用。它仅定义选择器字符串。
提供以下助手
getActionSelector()
getGlobalActionSelector()
getIndexEntityActionSelector()
getIndexEntityRowSelector()
getIndexColumnSelector()
getIndexHeaderColumnSelector()
getIndexHeaderRowSelector()
getFormEntity()
getEntityFormSelector()
getFormFieldIdValue()
getFormFieldSelector()
getFormFieldLabelSelector()