测试

编辑本页

警告:您正在浏览的文档欧宝体育电话欧宝娱乐app下载地址Symfony 5.2,现已不再维护。

本页的更新版本用于Sy欧宝娱乐app下载地址mfony 6.2(当前稳定版本)。

测试

每当您编写新的代码行时,您也可能会添加新的错误。为了构建更好、更可靠的应用程序,应该同时使用功能测试和单元测试来测试代码。

PHPUnit测试框架

欧宝娱乐app下载地址Symfony集成了一个名为PHPUnit)为您提供一个丰富的测试框架。本文不会涉及PHPUnit本身,它有自己的优点欧宝体育电话

在创建第一个测试之前,请先安装phpunit) / phpunit)欧宝娱乐app下载地址symfony /测试包,它会安装一些其他提供有用的Symfony测试工具的包:欧宝娱乐app下载地址

1
编译器需要——dev phpunit/phpunit symfony欧宝娱乐app下载地址测验

安装库后,尝试运行PHPUnit:

1
php /供应商/ bin / phpunit)

此命令自动运行应用程序的测试。每个测试都是一个以“test”结尾的PHP类。BlogControllerTest),生活在测试/应用程序的目录。

PHPUnit由phpunit.xml.dist文件在应用程序的根目录下。在大多数情况下,Symfony Flex提供的默认配置就足够了。欧宝娱乐app下载地址读了PHPUnit)欧宝体育电话文档发现所有可能的配置选项(例如,启用代码覆盖或将您的测试分成多个“测试套件”)。

请注意

欧宝娱乐app下载地址Symfony Flex会自动创建phpunit.xml.dist而且测试/ bootstrap.php.如果这些文件缺失,您可以尝试再次使用编译器配方:install phpunit/phpunit——force -v

测试类型

自动化测试有很多种类型,每个项目的精确定义通常是不同的。在Sy欧宝娱乐app下载地址mfony中,使用了以下定义。如果您了解到一些不同的东西,这并不一定是错误的,只是与Symfony文档使用的不同。欧宝体育电话欧宝娱乐app下载地址

单元测试
这些测试确保个人源代码单元(例如单个类)的行为与预期一致。
集成测试
这些测试测试类的组合,通常与Symfony的服务容器交互。欧宝娱乐app下载地址这些测试还没有覆盖完全工作的应用程序,这些测试被称为应用程序测试
应用程序测试
应用程序测试测试完整应用程序的行为。它们发出HTTP请求(包括真实的和模拟的请求)并测试响应是否符合预期。

单元测试

一个单元测试确保源代码的各个单元(例如单个类或某些类中的特定方法)符合其设计并按预期行事。在Symfony应用程序中编写单元测试与编写标准欧宝娱乐app下载地址的PHPUnit单元测试没有什么不同。你可以在PHPUnit文档中了解它:欧宝体育电话编写PHPUnit测试

按照惯例,测试/目录应为单元测试复制应用程序的目录。的类中测试类src /形式/目录,将测试放在测试/形式/目录中。自动加载是通过供应商/ autoload.php文件中默认配置的phpunit.xml.dist文件)。

属性可以运行测试/供应商/ bin / phpunit)命令:

1 2 3 4 5 6 7 8
#运行应用程序的所有测试php /供应商/ bin / phpunit)#运行表单/目录下的所有测试php ./vendor/bin/phpunit tests/表单#运行UserType类的测试php ./vendor/bin/phpunit tests/Form/UserTypeTest.php

提示

在大型测试套件中,为每种类型的测试创建子目录是有意义的。测试/单位/而且测试/功能/).

集成测试

与单元测试相比,集成测试将测试应用程序的更大一部分(例如,服务的组合)。集成测试可能希望使用Symfony Kernel从依赖注入容器中获取服务。欧宝娱乐app下载地址

欧宝娱乐app下载地址Symfony提供了一个KernelTestCase类,以帮助您在测试中使用创建和引导内核bootKernel ()

12 3 4 5 6 7 8 9 10 11 12 13 14
/ /测试/服务/ Newslet欧宝app在哪里找terGeneratorTest.php名称空间应用程序测试服务使用欧宝娱乐app下载地址FrameworkBundle测试KernelTestCase欧宝app在哪里找NewsletterGeneratorTest扩展KernelTestCase公共函数testSomething()自我::bootKernel ();/ /……}}

KernelTestCase还确保为每个测试重新启动内核。这保证了每个测试都是独立运行的。

要运行应用程序测试,请使用KernelTestCase类需要找到要初始化的应用程序内核。内核类通常定义在KERNEL_CLASS环境变量(包含在默认值中.env.test文件由Symfony Flex提供欧宝娱乐app下载地址):

1 2
# .env.testKERNEL_CLASS = App \内核

请注意

如果您的用例更复杂,您还可以重写getKernelClass ()createKernel ()方法,这些方法优先于KERNEL_CLASSenv var。

设置测试环境

测试将创建运行在测验环境.这允许在内部对测试进行特殊设置/测试/ config /包

如果您安装了Symfon欧宝娱乐app下载地址y Flex,那么一些包已经安装了一些有用的测试配置。例如,默认情况下,Twig bundle配置得特别严格,以便在将代码部署到生产环境之前捕获错误:

  • YAML
  • XML
  • PHP
1 2 3
#配置/包/测试/ twig.yaml枝:strict_variables:真正的

您也可以完全使用不同的环境,或重写默认的调试模式(真正的),将它们作为选项传递给bootKernel ()方法:

1 2 3 4
自我::bootKernel ([“环境”= >“my_test_env”“调试”= >]);

提示

建议使用它来运行测试调试设置为在CI服务器上,因为它显著提高了测试性能。这将禁止清除缓存。如果您的测试不是每次都在干净的环境中运行,则必须手动清除它,例如使用中的此代码测试/ bootstrap.php

1 2 3 4
/ /……//当调试模式被禁用时,确保有一个新的缓存\欧宝娱乐app下载地址 Symfony \文件系统组件\ \文件系统())->remove (__DIR__“/ . . / var /缓存/测试”);

自定义环境变量

如果您需要为您的测试定制一些环境变量(例如DATABASE_URL使用Doctrine),你可以通过覆盖你需要在你的.env.test文件:

1 2 3 4
# .env.test# ... DATABASE_URL="mysql://db_user:db_password@127.0.0.1:3306/db_name_test?serverVersion=5.7"

在测试环境中,读取这些env文件(如果其中有重复的vars,列表中较低的文件将覆盖前面的项):

  1. .env:包含应用程序默认值的env变量;
  2. .env.test:覆盖/设置特定的测试值或变量;
  3. .env.test.local:覆盖此机器特定的设置。

谨慎

.env.local文件是在测试环境中使用,使每个测试设置尽可能一致。

在测试中检索服务

在集成测试中,经常需要从服务容器中获取服务以调用特定的方法。在引导内核之后,容器被存储在自我::$容器

12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
/ /测试/服务/ Newslet欧宝app在哪里找terGeneratorTest.php名称空间应用程序测试服务使用应用程序服务欧宝app在哪里找NewsletterGenerator使用欧宝娱乐app下载地址FrameworkBundle测试KernelTestCase欧宝app在哪里找NewsletterGeneratorTest扩展KernelTestCase公共函数testSomething()//(1)启动Symfony内核欧宝娱乐app下载地址自我::bootKernel ();//(2)使用self::$container访问服务容器容器自我:: $容器;//(3)运行一些服务并测试结果欧宝app在哪里找newsletterGenerator容器->get 欧宝app在哪里找(NewsletterGenerator::类);欧宝app在哪里找通讯欧宝app在哪里找newsletterGenerator->generateMonthly欧宝app在哪里找News(…);->assertequal(…欧宝app在哪里找通讯->getContent ());}}

容器自我::$容器实际上是一个特殊的测试容器。它使您可以访问公共服务和未删除的服务私人服务服务。

请注意

方法中,如果需要测试已删除的私有服务(未被任何其他服务使用的私有服务),则需要将这些私有服务声明为公共服务配置/ services_test.yaml文件。

为测试配置数据库

与数据库交互的测试应该使用自己的单独数据库,以免与其他数据库中使用的数据库混淆配置环境

要做到这一点,请编辑或创建.env.test.local文件的根目录,并为DATABASE_URLenv var:

1 2
# .env.test.localDATABASE_URL =“mysql: / /用户名:PASSWORD@127.0.0.1:3306 / DB_NAME ? serverVersion = 5.7 "

这里假设每个开发人员/机器使用不同的数据库进行测试。如果每台机器上的测试设置相同,则使用.env.test文件,并将其提交到共享存储库。了解更多在Symfony应用程序中使用多个.env文件欧宝娱乐app下载地址

之后,您可以使用以下命令创建测试数据库和所有表:

1 2 3 4 5
#创建测试数据库PHP bin/console——env=测验原则:数据库:创建在test数据库中创建表/列PHP bin/console——env=测验原则:模式:创建

提示

一个常见的做法是附加_t测试中原始数据库名称的后缀。如果生产中的数据库名称被调用project_acme测试数据库的名称可以是project_acme_test

每次测试前自动重置数据库

测试应该相互独立,以避免副作用。例如,如果某个测试修改了数据库(通过添加或删除实体),它可能会更改其他测试的结果。

DAMADoctrineTestBundle使用Doctrine事务让每个测试与未修改的数据库交互。使用以下方法安装:

1
Composer require——dev dama/doctrine-test-bundle

现在,启用它作为PHPUnit扩展:

1 2 3 4 5 6 7 8
<!--phpunit.xml.dist--><phpunit)><!--...--><扩展><扩展“DAMA \ DoctrineTestBundle \ PHPUnit) \ PHPUnitExtension”/>扩展>phpunit)>

就是这样!这个包使用了一个聪明的技巧:它在每个测试之前开始一个数据库事务,并在测试结束后自动回滚它以撤销所有更改。的文档中了解更多信息欧宝体育电话DAMADoctrineTestBundle

加载虚拟数据夹具

与使用来自生产数据库的真实数据不同,通常在测试数据库中使用假数据或虚拟数据。这通常被称为“设备数据”Doctrine提供了一个库来创建和加载它们。安装方法:

1
编写人员需要—dev doctrine/doctrine-fixture -bundle

然后,使用:设备命令欧宝娱乐app下载地址SymfonyMakerBundle生成一个空的fixture类:

1 2 3 4
要创建的fixture的类名(例如AppFixtures): > ProductFixture

然后修改使用这个类来加载数据库中的新实体。例如,加载产品对象进入教义,使用:

12 3 4 5 6 7 8 9 10 11 12 13 14 16 17 18 19 20 21 22
/ / src / DataFixtures / ProductFixture.php名称空间应用程序DataFixtures使用应用程序实体产品使用学说FixturesBundle夹具使用学说持久性ObjectManagerProductFixture扩展夹具公共函数负载(ObjectManager经理产品产品();产品->setName (“无价的小部件”);产品->setPrice (14.50);产品->setDescription (“好吧,我想它的确是有价格的”);经理->persist (产品);//添加更多的产品经理->冲洗();}}

清空数据库并重新加载所有fixture类具有:

1
PHP bin/控制台原则:fixture:load

有关更多信息,请阅读DoctrineFixturesBundle文欧宝体育电话档

应用程序测试

应用程序测试检查应用程序所有不同层(从路由到视图)的集成。就PHPUnit而言,它们与单元测试或集成测试没有什么不同,但它们有一个非常具体的工作流程:

  1. 提出请求
  2. 与页面交互(例如点击链接或提交表格);
  3. 测试响应
  4. 清洗并重复。

请注意

本节中使用的工具可以通过欧宝娱乐app下载地址symfony /测试包,使用Composer需要symfony欧宝娱乐app下载地址/test-pack如果你还没有这样做的话。

编写第一个应用程序测试

应用程序测试是PHP文件,通常位于测试/控制器/应用程序的目录。它们经常延伸WebTestCase.类的基础上添加了特殊的逻辑KernelTestCase.你可以在上面读到更多集成测试一节

如果您想测试由您的为PostController类,首先创建一个newPostControllerTest使用:测试命令欧宝娱乐app下载地址SymfonyMakerBundle

1 2 3 4 5 6 7
PHP bin/控制台:测验哪一个测验类型你愿意吗?:>WebTestCase的的名字of the测验类(例如BlogPostTest): >控制器\PostControllerTest

这将创建以下测试类:

12 3 4 5 6 7 8 9 10 11 12 13 14 16 17 18 19 20 21
/ /测试/控制器/ PostControllerTest.php名称空间应用程序测试控制器使用欧宝娱乐app下载地址FrameworkBundle测试WebTestCasePostControllerTest扩展WebTestCase公共函数testSomething()无效//调用KernelTestCase::bootKernel(),并创建一个//作为浏览器的客户端客户端静态::createClient ();//请求指定的页面履带客户端->请求(“得到”' / ');//验证一个成功的响应和一些内容->assertResponseIsSuccessful ();->assertSelectorTextContains (“标题”“Hello World”);}}

在上面的示例中,测试验证HTTP响应是否成功,并且请求体包含<标题>标签与“Hello world”

请求()方法还返回一个爬虫程序,您可以使用它在测试中创建更复杂的断言:

1 2 3 4
履带客户端->请求(“得到”' / post / hello world ');//例如,计算页面上' .comment ' '元素的数量->assertCount (4履带->过滤器(“.comment”));

你可以了解更多关于爬虫在DOM爬虫

发出请求

测试客户端模拟一个HTTP客户端,就像一个浏览器,并向您的Symfony应用程序发出请求:欧宝娱乐app下载地址

1
履带客户端->请求(“得到”' / post / hello world ');

请求()方法将HTTP方法和URL作为参数,并返回一个履带实例。

提示

硬编码请求url是应用程序测试的最佳实践。如果测试使用Symfony路由器生成url,它将不会检测到对应用程序url欧宝娱乐app下载地址所做的任何可能影响最终用户的更改。

的完整签名请求()方法是:

1 2 3 4 5 6 7 8 9
请求(方法uri数组参数= [],数组文件= [],数组服务器= [],内容changeHistory真正的

这允许你创建你能想到的所有类型的请求:

:local::depth: 1

提示

测试客户端可作为test.client服务在容器中测验环境(或任何地方)framework.test选项已启用)。这意味着如果需要,您可以完全覆盖该服务。

浏览网站

客户端支持许多可以在真正的浏览器中完成的操作:

1 2 3 4 5 6
客户端->回();客户端->转发();客户端->重载();//清除所有cookie和历史记录客户端->重启();

请注意

回()而且转发()方法跳过请求URL时可能发生的重定向,就像普通浏览器那样。

重定向

当请求返回重定向响应时,客户端不会自动跟随它。属性可以检查响应并强制重定向followRedirect ()方法:

1
履带客户端->followRedirect ();

方法强制执行所有重定向操作followRedirects ()方法,然后执行请求:

1
客户端->followRedirects ();

如果你通过了followRedirects ()方法,将不再执行重定向:

1
客户端->followRedirects ();

登录用户(鉴权)

5.1

loginUser ()方法在Symfony 5.1中引入。欧宝娱乐app下载地址

当您希望为受保护的页面添加应用程序测试时,必须首先以用户身份“登录”。重现实际的步骤(例如提交登录表单)会使测试非常缓慢。出于这个原因,Symfony提供了欧宝娱乐app下载地址一个loginUser ()方法在功能测试中模拟登录。

建议创建一个仅用于测试的用户,而不是使用实际用户登录。你可以用《教义》来做数据设备,以只在测试数据库中加载测试用户。

在数据库中加载用户后,使用用户存储库获取该用户并使用客户端- > loginUser ()模拟一个登录请求:

12 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
/ /测试/控制器/ ProfileControllerTest.php名称空间应用程序测试控制器使用应用程序存储库UserRepository使用欧宝娱乐app下载地址FrameworkBundle测试WebTestCaseProfileControllerTest扩展WebTestCase/ /……公共函数testVisitingWhileLoggedIn()客户端静态::createClient ();userRepository静态:: $容器->get (UserRepository::类);//获取test用户testUseruserRepository->findOneByEmail (“john.doe@example.com”);//模拟$testUser登录客户端->loginUser (testUser);//测试配置文件页面客户端->请求(“得到”“/配置文件”);->assertResponseIsSuccessful ();->assertSelectorTextContains (“标题”“你好,约翰!”);}}

你可以通过任何用户界面实例loginUser ().此方法创建一个特殊的TestBrowserToken对象,并存储在测试客户端的会话中。

AJAX请求

客户端提供一个xmlHttpRequest ()方法,该方法具有与请求()方法,是AJAX请求的快捷方式:

1 2
//自动添加所需的HTTP_X_REQUESTED_WITH头客户端->xmlHttpRequest (“职位”/提交的, (“名字”= >“法”]);

发送自定义头文件

的第二个参数来传递它们createClient ()

1 2 3 4
客户端静态::createClient ([], [“HTTP_HOST”= >“en.example.com”“HTTP_USER_AGENT”= >“MySuperBrowser / 1.0”]);

你也可以在每个请求的基础上覆盖HTTP头:

1 2 3 4
客户端->请求(“得到”' / ', [], [], [“HTTP_HOST”= >“en.example.com”“HTTP_USER_AGENT”= >“MySuperBrowser / 1.0”]);

谨慎

类中定义的语法必须遵循自定义标头的名称RFC 3875 4.1.18节:替换-通过_,将其转换为大写,并在结果前加上HTTP_.例如,如果您的头名称是X-Session-Token,通过HTTP_X_SESSION_TOKEN

报告异常

在应用程序测试中调试异常可能很困难,因为默认情况下它们会被捕获,您需要查看日志以查看抛出了哪些异常。禁止在测试客户端捕获异常,允许PHPUnit报告异常:

1
客户端->catchExceptions ();

访问内部对象

如果你使用客户端来测试你的应用程序,你可能想要访问客户端的内部对象:

1 2
历史客户端->getHistory ();cookieJar客户端->getCookieJar ();

你也可以得到与最新请求相关的对象:

12 3 4 5 6 7 8 9 10 11 12 13 14
// HttpKernel请求实例请求客户端->getRequest ();// BrowserKit请求实例请求客户端->getInternalRequest ();// HttpKernel响应实例响应客户端->getResponse ();// BrowserKit响应实例响应客户端->getInternalResponse ();//爬虫实例履带客户端->getCrawler ();

访问分析器数据

对于每个请求,您都可以启用Symfony剖析器来收集关于该请求的内部处理欧宝娱乐app下载地址的数据。例如,剖析器可用于验证给定页面在加载时运行的数据库查询次数是否少于一定数量。

要获取最后一个请求的分析器,请执行以下操作:

1 2 3 4 5 6 7
//为下一个请求启用分析器客户端->enableProfiler ();履带客户端->请求(“得到”' /分析器');//获取配置文件配置文件客户端->getProfile ();

有关在测试中使用分析器的详细信息,请参见如何在功能测试中使用分析器篇文章。

与响应交互

像一个真正的浏览器,客户端和爬虫对象可以用来与你所服务的页面交互:

:local::depth: 1

使用clickLink ()方法单击包含给定文本的第一个链接(或包含该文本的第一个可单击图像)alt属性):

1 2 3 4
客户端静态::createClient ();客户端->请求(“得到”' / post / hello world ');客户端->clickLink (“点击这里”);

如果您需要访问链接对象,该对象提供特定于链接的有用方法(例如getMethod ()而且getUri ()),使用爬虫:selectLink ()方法:

1 2 3 4 5 6 7 8
客户端静态::createClient ();履带客户端->请求(“得到”' / post / hello world ');链接履带->selectLink (“点击这里”->链接();/ /……//使用click()如果你想点击选定的链接客户端->点击(链接);

提交表单

使用submitForm ()方法提交包含给定按钮的表单:

1 2 3 4 5 6
客户端静态::createClient ();客户端->请求(“得到”' / post / hello world ');履带客户端->submitForm (“添加评论”, (comment_form[内容]= >'...']);

的第一个参数submitForm ()是文本内容,id价值的名字任何< >按钮< input type = " submit " >包括在表格中。第二个可选参数用于覆盖默认的表单字段值。

请注意

注意,您选择的是表单按钮而不是表单,因为一个表单可以有几个按钮。如果使用遍历API,请记住必须寻找按钮。

如果您需要访问形式对象,该对象提供特定于表单的有用方法(例如getUri ()getvalue ()而且getFields ())使用爬虫:selectButton ()方法:

12 3 4 5 6 7 8 9 10 11 12 13 14 16 17 18 19 20 21 22
客户端静态::createClient ();履带客户端->请求(“得到”' / post / hello world ');//选择按钮buttonCrawlerNode履带->selectButton (“提交”);//检索属于该按钮的表单的Form对象形式buttonCrawlerNode->形式();//设置表单对象的值形式my_form[名称]] =“法”形式“my_form(主题)”] =“欧宝娱乐app下载地址Symfony岩石!”//提交表单对象客户端->提交(形式);//可选地,你可以通过传递一个数组来组合最后两个步骤//字段值,同时提交表单:客户端->提交(形式, (my_form[名称]= >“法”“my_form(主题)”= >“欧宝娱乐app下载地址Symfony岩石!”]);

根据表单类型,您可以使用不同的方法来填充输入:

12 3 4 5 6 7 8 9 10 11 12
//选择一个选项或收音机形式“my_form(国家)”->选择(“法国”);//勾选复选框形式my_form [like_欧宝娱乐app下载地址symfony]”->蜱虫();//上传文件形式my_form[图片]”->上传(“/道路/ / lucas.jpg”);//如果是多个文件上传形式“my_form(领域)[0]”->上传(“/道路/ / lucas.jpg”);形式“my_form(领域)[1]”->上传(“/道路/ / lisa.jpg”);

提示

而不是硬编码表单名称作为字段名称的一部分(例如;my_form[…]在前面的示例中),可以使用getName ()方法获取表单名称。

提示

如果您有意选择“无效”的选择/单选值,请参见DomCrawler组件

提示

方法可以获得将要提交的值getvalue ()方法。形式对象。返回的单独数组中有上传的文件getfile ().的getPhpValues ()而且getPhpFiles ()方法也会返回提交的值,但是是PHP格式(它转换了带有方括号符号的键)。my_form(主题)- PHP数组)。

提示

提交()而且submitForm ()方法定义可选参数,在提交表单时添加自定义服务器参数和HTTP报头:

1 2
客户端->提交(形式, [], [“HTTP_ACCEPT_LANGUAGE”= >“西文”]);客户端->submitForm (按钮[],“职位”, (“HTTP_ACCEPT_LANGUAGE”= >“西文”]);

测试响应(断言)

现在测试已经访问了一个页面并与之交互(例如填写了一个表单),是时候验证预期的输出是否显示了。

由于所有测试都基于PHPUnit,所以您可以使用任何PHPUnit)断言在你的测试中。结合测试客户端和爬虫,这允许你检查你想要的任何东西。

但是,Symfon欧宝娱乐app下载地址y为最常见的情况提供了有用的快捷方法:

:local::depth: 1

响应断言

assertResponseIsSuccessful(string $message = ")
断言响应成功(HTTP状态为2xx)。
assertResponseStatusCodeSame(int $expectedCode, string $message = ")
断言一个特定的HTTP状态代码。
assertResponseRedirects(字符串$expectedLocation = null, int $expectedCode = null,字符串$message = ")
断言响应是重定向响应(您可以选择检查目标位置和状态代码)。
assertResponseHasHeader(字符串$headerName,字符串$message = ")/assertResponseNotHasHeader(字符串$headerName,字符串$message = ")
断言给定的报头在响应上(不可)可用。
assertResponseHeaderSame(字符串$headerName,字符串$expectedValue,字符串$message = ")/assertResponseHeaderNotSame(字符串$headerName,字符串$expectedValue,字符串$message = ")
断言给定的报头不(不)包含响应上的期望值。
assertResponseHasCookie(字符串$name,字符串$path = '/',字符串$domain = null,字符串$message = " ")/assertResponseNotHasCookie(字符串$name,字符串$path = '/',字符串$domain = null,字符串$message = " ")
断言在响应中存在给定的cookie(可选地检查特定的cookie路径或域)。
assertResponseCookieValueSame(字符串$name,字符串$expectedValue,字符串$path = '/',字符串$domain = null,字符串$message = ")
断言给定的cookie存在并设置为期望的值。

请求断言

assertRequestAttributeValueSame(字符串$name,字符串$expectedValue,字符串$message = ")
断言给定的请求属性设置为期望值。
assertRouteSame($expectedRoute,数组$parameters =[],字符串$message = ")
断言匹配给定路由和可选路由参数的请求。

浏览器的断言

assertBrowserHasCookie(字符串$name,字符串$path = '/',字符串$domain = null,字符串$message = " ")/assertBrowserNotHasCookie(string $name, string $path = '/', string $domain = null, string $message = " ")
断言测试客户端没有(没有)给定的cookie集(意味着,该cookie是由测试中的任何响应设置的)。
assertBrowserCookieValueSame(字符串$name,字符串$expectedValue,字符串$path = '/',字符串$domain = null,字符串$message = ")
断言测试客户端中给定的cookie被设置为期望的值。

履带断言

assertSelectorExists(string $selector, string $message = ")/assertSelectorNotExists(string $selector, string $message = ")
断言给定的选择器不(不)匹配响应中的至少一个元素。
assertSelectorTextContains(字符串$selector,字符串$text,字符串$message = ")/assertSelectorTextNotContains(字符串$selector,字符串$text,字符串$message = ")
断言与给定选择器匹配的第一个元素不包含所期望的文本。
assertSelectorTextSame(字符串$selector,字符串$text,字符串$message = ")
断言与给定选择器匹配的第一个元素的内容不(不)等于预期的文本。
assertPageTitleSame(字符串$expectedTitle,字符串$message = ")
断言<标题>元素等于给定的标题。
assertpagetitleconcontains(字符串$expectedTitle,字符串$message = ")
断言<标题>元素包含给定的标题。
assertInputValueSame(字符串$fieldName,字符串$expectedValue,字符串$message = ")/assertInputValueNotSame(字符串$fieldName,字符串$expectedValue,字符串$message = ")
断言具有给定名称的表单输入的值不(不)等于预期值。
assertCheckboxChecked(字符串$fieldName,字符串$message = ")/assertCheckboxNotChecked(字符串$fieldName,字符串$message = ")
断言带有给定名称的复选框被(未)选中。
assertFormValue(字符串$formSelector,字符串$fieldName,字符串$value,字符串$message = ")/assertNoFormValue(字符串$formSelector,字符串$fieldName,字符串$message = ")
断言与给定选择器匹配的第一个表单字段的值不等于期望值。

5.2

assertCheckboxChecked ()assertCheckboxNotChecked ()assertFormValue ()而且assertNoFormValue ()方法在Symfony 5.2中介绍。欧宝娱乐app下载地址

梅勒断言

5.1

从Symfony 5.1开始欧宝娱乐app下载地址,下面的断言不再需要使用客户端在测试用例中扩展WebTestCase类。

assertEmailCount(int $count, string $transport = null, string $message = ")
断言已发送的电子邮件的预期数量。
assertQueuedEmailCount(int $count, string $transport = null, string $message = ")
断言排队的电子邮件的预期数量(例如使用Messenger组件)。
assertEmailIsQueued(MessageEvent $event, string $message = ")/assertEmailIsNotQueued(MessageEvent $event, string $message = ")
断言给定的邮件事件(未)排队。使用getMailerEvent(int $index = 0, string $transport = null)按索引检索邮件发送事件。
assertEmailAttachmentCount(RawMessage $email, int $count, string $message = ")
断言给定的电子邮件具有预期的附件数量。使用getMailerMessage(int $index = 0, string $transport = null)以索引检索特定的电子邮件。
assertEmailTextBodyContains(RawMessage $email,字符串$text,字符串$message = ")/assertEmailTextBodyNotContains(RawMessage $email,字符串$text,字符串$message = ")
断言给定电子邮件的文本主体不(不)包含预期的文本。
assertEmailHtmlBodyContains(RawMessage $email, string $text, string $message = ")/assertEmailHtmlBodyNotContains(RawMessage $email, string $text, string $message = ")
断言给定电子邮件的HTML正文不(不)包含预期的文本。
assertEmailHasHeader(RawMessage $email, string $headerName, string $message = ")/assertEmailNotHasHeader(RawMessage $email, string $headerName, string $message = ")
断言给定的电子邮件没有(没有)预期的头集。
assertEmailHeaderSame(RawMessage $email, string $headerName, string $expectedValue, string $message = ")/assertEmailHeaderNotSame(RawMessage $email, string $headerName, string $expectedValue, string $message = ")
断言给定的电子邮件没有(没有)将预期头设置为预期值。
assertEmailAddressContains(RawMessage $email,字符串$headerName,字符串$expectedValue,字符串$message = ")
断言给定的地址头等于预期的电子邮件地址。此断言将如下地址规范化简·史密斯jane@example.com
..待办事项

端到端测试(E2E)

  • 测试javascript
  • UX或表单集合为例?
此工作,包括代码示例,是根据创作共用BY-SA 3.0许可证。