测试
由于 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()