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


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

所以我正在为我正在为客户开发的应用程序编写一些集成测试。他们有一个设计师将处理 HTML,所以我们的测试包括检查链接是否存在、检查单选组是否具有我们期望拥有的所有值等(这样在设计师给我们编辑后,我们可以通过测试确保他没有错误地更改一些他不应该更改的内容(。

所以假设我们有一个性别的无线电输入,我们想检查输入值男性和女性是否存在,所以我很自然地写了这样的东西:

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

..如果没有名称"性别"的无线电输入值为"男性",则预计这将失败。所以看看Laravel源代码,我发现这不是->select((背后的哲学,它只是将一个值存储到一些内部$inputs变量中,这意味着这也将失败:

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

问题有没有办法使用内置功能来运行这样的测试,我想达到->select($value, $option)的预期用途,如果在视图中没有无线电或选择输入,它会失败$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建议的那样自定义断言。