Laravel 测试:检查页面上是否存在具有特定值的单选输入

Laravel testing: check if a radio input with a specific value exists on a page

所以我正在为我正在为客户开发的应用程序编写一些集成测试。他们有一个设计师要在 HTML 上工作,所以我们的测试有检查 link 是否存在,检查无线电组是否具有我们期望的所有值等(这是为了在设计师给我们修改后,我们可以通过测试确定他没有错误地更改一些他不应该更改的东西。

假设我们有 gender 的无线电输入,我们想检查输入值 malefemale 存在所以很自然地我写了这样的东西:

$this->visit('/auth/register')
    ->select('male', 'sex');

..如果没有名称为 'sex' 且值为 'male' 的无线电输入,预计此操作会失败。所以查看 Laravel 源代码,我发现这不是 ->select() 背后的哲学,它只是将一个值存储到某个内部 $inputs 变量,这意味着这也会失败:

$this->visit('/auth/register')
    ->select('male', 'sex');
    ->seeIsSelected('sex', 'male');

问题是有没有办法使用 运行 这种测试的内置功能,我想达到 ->select($value, $option) 的预期用途,如果在视图中没有收音机或 select 输入是否带有 $value 和 $option 的组合?

PS:我知道,并且作为最后的手段,->see("type='radio' value='male') 方法

默认断言中似乎没有办法做到这一点。功能最接近的是 seeInField()seeIsSelected(),但它们并不完全符合我的要求。一种解决方案(可以根据您的断言口味进行编辑)是:

$this->assertCount(1, $this->visit('/auth/register')
    ->crawler->filter('input[name="sex"][value="female"]'));

另一个解决方案是自定义断言,就像 Joshua Pendo 建议的那样。