
phpunit 开箱即用,具有 assertsee 和 assertseetext 等功能,在这两种情况下我们都可以针对特定文本进行断言,为了断言 html 标签,我们将依靠这些功能进行一些自定义工作来进一步完善它们。
我需要测试某些表单是否生成 csrf 令牌。
laravel csrf 令牌指令生成如下输入:
<input type="hidden" name="_token" value="random_generated_token" ...>
由于生成的令牌在请求之间发生变化,我们不会测试生成的令牌值,而是断言输入存在并具有某些所需的属性,phpunit assertsee 有第二个参数来转义值,以便我们可以做一些事情像这样:
$this
->get("contact-us")
->assertsee([
'<input name="some_database_column"'
], false);
它可以解决我们的解决方案,但可能有更好的方法可以在更多情况下使用它,因此使用“一厢情愿”的方法编写我想要的代码将是这样的:
$this->get("contact-us")
->asserthtml('input', [
"type" => "hidden",
"name" => "_token",
])
这将很有用,因为它添加了一个断言,只需传递标签名称和属性数组即可在多种情况下工作
我们可以在 laravel 中添加类似的内容,方法是向 appserviceprovider 或任何其他自定义 provider 中的 testresponse 类添加自定义宏:
testresponse::macro('asserthtml', function ($tag, $attributes) {
$attributes = collect($attributes)
->map(function ($attributevalue, $attributekey) {
return "$attributekey=\"$attributevalue\" ";
})
->values()
->implode("", "");
$htmlelement = "<$tag $attributes";
$this->assertsee([$htmlelement], false);
});
现在我们可以通过测试标签和属性的存在来测试我们的 dom。
现代化家居响应式网站模板源码是以cmseasy进行开发的家居网站模板。该软件可免费使用,模板附带测试数据!模板源码特点:整体采用浅色宽屏设计,简洁大气,电脑手机自适应布局,大方美观,功能齐全,值得推荐的一款模板,每个页面精心设计,美观大方,兼容各大浏览器;所有代码经过SEO优化,使网站更利于搜索引擎排名,是您做环保类网站的明确选择。无论是在电脑、平板、手机上都可以访问到排版合适的网站,即便是微信等
0
立即学习“PHP免费学习笔记(深入)”;
在这种情况下,我们可以向前推进一点,我需要在应用程序中以多种形式断言表单作为 csrf 令牌,因此我们可以依靠我们的宏来创建更多断言,在本例中作为预期的 html 标签并且属性不会改变我可以添加这样的东西:
testresponse::macro('assertcsrftokenexists', function () {
$this->asserthtml('input', [
"type" => "hidden",
"name" => "_token",
]);
});
这个断言很短,可重复使用,易于阅读和使用:
$this->get("contact-us")->assertCSRFTokenExists();
对于更强大的断言,您应该考虑一个优秀的包,例如:
辛贝克/laravel-dom-断言
希望这有助于在您的测试中添加基本的 dom 断言
以上就是使用 PHPUnit 在 Laravel 中测试您的 DOM的详细内容,更多请关注php中文网其它相关文章!
PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号