跳到内容

测试

编辑此页

由于 EasyAdmin 基于 Symfony,你可以通过扩展 WebTestCase 类并使用 Symfony 功能测试工作流 为管理页面添加功能测试。

然而,由于 EasyAdmin 在其 CRUD 页面中使用特定的数据展示方式,因此提供了一个自定义测试类:AbstractCrudTestCase。该类基于 traits,其中定义了自定义断言和助手

  1. 功能测试用例示例
  2. URL 生成
  3. 断言
  4. 选择器助手

功能测试用例示例

假设你有一个名为 App\Controller\Admin\AppDashboardController仪表盘 和一个名为 App\Controller\Admin\CategoryCrudControllerCategory 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 可以单独使用,但在这种情况下,使用它的类需要

  • 一个类属性 clientSymfony\Bundle\FrameworkBundle\KernelBrowser 的实例
  • 一个类属性 entitytManagerDoctrine\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()
这项工作,包括代码示例,均在 Creative Commons BY-SA 3.0 许可下获得许可。
目录
    版本