stevegrunwell / phpunit-markup-assertions
为PHPUnit提供的断言,用于验证标记中元素的存在或状态
Requires
- php: ^5.6 || ^7.0 || ^8.0
- laminas/laminas-dom: ~2.7.2 || ^2.8
Requires (Dev)
- symfony/phpunit-bridge: ^5.2 || ^6.2
This package is auto-updated.
Last update: 2024-09-18 10:46:09 UTC
README
此库引入了MarkupAssertionsTrait
特性,用于在PHPUnit测试中使用。
这些断言允许您检查生成的标记,而无需将测试与DOMDocument
或丑陋的正则表达式混淆。如果您使用PHP生成任何标记,PHPUnit Markup Assertions特性旨在使输出可测试,而不会使测试变得脆弱。
示例
use PHPUnit\Framework\TestCase; use SteveGrunwell\PHPUnit_Markup_Assertions\MarkupAssertionsTrait; class MyUnitTest extends TestCase { use MarkupAssertionsTrait; /** * Ensure the #first-name and #last-name selectors are present in the form. */ public function testRenderFormContainsInputs() { $markup = render_form(); $this->assertContainsSelector('#first-name', $markup); $this->assertContainsSelector('#last-name', $markup); } }
安装
要将PHPUnit Markup Assertions添加到项目中,首先使用Composer安装库
$ composer require --dev stevegrunwell/phpunit-markup-assertions
接下来,将SteveGrunwell\PHPUnit_Markup_Assertions\MarkupAssertionsTrait
特性导入到每个将利用断言的测试用例中
use PHPUnit\Framework\TestCase; use SteveGrunwell\PHPUnit_Markup_Assertions\MarkupAssertionsTrait; class MyTestCase extends TestCase { use MarkupAssertionsTrait; }
使PHPUnit Markup Assertions全局可用
如果您希望方法在整个测试套件中可用,您可以考虑子类化PHPUnit测试用例并应用特性
# tests/TestCase.php namespace Tests; use PHPUnit\Framework\TestCase as BaseTestCase; use SteveGrunwell\PHPUnit_Markup_Assertions\MarkupAssertionsTrait; class TestCase extends BaseTestCase { use MarkupAssertionsTrait; }
然后更新其他测试用例以使用您的新基类
# tests/Unit/ExampleTest.php namespace Tests/Unit; use Tests\TestCase; class MyUnitTest extends TestCase { // This class now automatically has markup assertions. }
可用方法
这些是通过MarkupAssertionsTrait
提供给PHPUnit的断言。
assertContainsSelector()
assertNotContainsSelector()
assertSelectorCount()
assertHasElementWithAttributes()
assertNotHasElementWithAttributes()
assertElementContains()
assertElementNotContains()
assertElementRegExp()
assertElementNotRegExp()
assertContainsSelector()
断言给定的字符串包含匹配给定选择器的元素。
- (string) $selector
- 要查找的元素的查询选择器。
- (string) $markup
- 应包含
$selector
的标记。 - (string) $message
- 断言失败时显示的消息。
示例
public function testBodyContainsImage() { $body = getPageBody(); $this->assertContainsSelector('img', $body, 'Did not find an image in the page body.'); }
assertNotContainsSelector()
断言给定的字符串不包含匹配给定选择器的元素。
此方法是对assertContainsSelector()
的逆操作。
- (string) $selector
- 要查找的元素的查询选择器。
- (string) $markup
- 不应包含
$selector
的标记。 - (string) $message
- 断言失败时显示的消息。
assertSelectorCount()
断言匹配给定选择器的元素出现的次数。
- (int) $count
- 期望的匹配元素的数量。
- (string) $selector
- 要查找的元素的查询选择器。
- (string) $markup
- 运行断言的标记。
- (string) $message
- 断言失败时显示的消息。
示例
public function testPostList() { factory(Post::class, 10)->create(); $response = $this->get('/posts'); $this->assertSelectorCount(10, 'li.post-item', $response->getBody()); }
assertHasElementWithAttributes()
断言给定标记中存在具有给定属性的元素。
- (array) $attributes
- 应在元素上找到的HTML属性数组。
- (string) $markup
- 应包含具有提供的
$attributes
的元素的标记。 - (string) $message
- 断言失败时显示的消息。
示例
public function testExpectedInputsArePresent() { $user = getUser(); $form = getFormMarkup(); $this->assertHasElementWithAttributes( [ 'name' => 'first-name', 'value' => $user->first_name, ], $form, 'Did not find the expected input for the user first name.' ); }
assertNotHasElementWithAttributes()
断言给定标记中不存在具有给定属性的元素。
- (array) $attributes
- 不应在元素上找到的HTML属性数组。
- (string) $markup
- 不应包含具有提供的
$attributes
的元素的标记。 - (string) $message
- 断言失败时显示的消息。
assertElementContains()
断言具有给定选择器的元素包含一个字符串。
- (string) $contents
- 在DOM节点的内容中查找的字符串。
- (string) $selector
- 要查找的元素的查询选择器。
- (string) $markup
- 应包含
$selector
的标记。 - (string) $message
- 断言失败时显示的消息。
示例
public function testColumnShowsUserEmail() { $user = getUser(); $table = getTableMarkup(); $this->assertElementContains( $user->email, 'td.email', $table, 'The <td class="email"> should contain the user\'s email address.' ); }
assertElementNotContains()
断言具有给定选择器的元素不包含一个字符串。
此方法是对assertElementContains()
的逆操作。
- (string) $contents
- 在DOM节点的内容中查找的字符串。
- (string) $selector
- 要查找的元素的查询选择器。
- (string) $markup
- 应包含
$selector
的标记。 - (string) $message
- 断言失败时显示的消息。
assertElementRegExp()
断言具有给定选择器的元素包含一个字符串。
此方法与assertElementContains()
类似,但使用正则表达式而不是简单的字符串匹配。
- (string) $regexp
- 在DOM节点中查找的正则表达式模式。
- (string) $selector
- 要查找的元素的查询选择器。
- (string) $markup
- 应包含
$selector
的标记。 - (string) $message
- 断言失败时显示的消息。
assertElementNotRegExp()
断言具有给定选择器的元素不包含一个字符串。
此方法是对 assertElementRegExp()
的逆操作,其行为类似于 assertElementNotContains()
,但使用正则表达式而不是简单的字符串匹配。
- (string) $regexp
- 在DOM节点中查找的正则表达式模式。
- (string) $selector
- 要查找的元素的查询选择器。
- (string) $markup
- 应包含
$selector
的标记。 - (string) $message
- 断言失败时显示的消息。