【问题标题】:Laravel testing: check if a radio input with a specific value exists on a pageLaravel 测试:检查页面上是否存在具有特定值的无线电输入
【发布时间】:2016-02-07 06:18:34
【问题描述】:

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

假设我们有一个 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) 的预期用途,如果在视图中没有收音机或选择输入,它将失败$value 和 $option 的组合?

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

【问题讨论】:

  • 你想用什么? “看”在做什么?
  • 如果see() 不够好,我认为您将需要一个自定义函数
  • 你是对的。最终滚动了一些自定义的东西,但是内置的可以接近(如果您可以查看下面的答案)。谢谢!

标签: php laravel laravel-5.2


【解决方案1】:

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

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

另一种解决方案是 Joshua Pendo 建议的自定义断言。

【讨论】:

    猜你喜欢
    • 2014-08-02
    • 1970-01-01
    • 1970-01-01
    • 2013-03-25
    • 2022-01-16
    • 2018-10-10
    • 1970-01-01
    • 2021-09-23
    • 2013-08-16
    相关资源
    最近更新 更多