当用户提交没有任何数据的表单时,我想用PHPUnit测试我的Symfony2应用程序。
我的验证已激活,因此错误消息会在导航器中正确显示。例如,在实体中:
class Foo
{
/**
* @var string
*
* @Assert\NotBlank()
* @ORM\Column(name="name", type="string", length=255)
*/
private $name;
/**
* @var string
*
* @Assert\NotBlank()
* @ORM\Column(name="city", type="string", length=255)
*/
private $city;
}
这个实体的类型:
class FooType extends AbstractType
{
/**
* @param FormBuilderInterface $builder
* @param array $options
*/
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('name', 'text')
->add('city', 'text');
}
// ...
}
当我提交没有任何数据的表单时,响应中包含2条消息“此值不应为空白”。
所以在我的测试中我想要检索这两条消息,但过滤器函数只返回1:
public function testShouldNotSaveANewFooWhenDataIsEmpty()
{
$crawler = $this->client->request('GET', '/foo/new');
$form = $crawler->selectButton('Add')->form(array(
'foo[name]' => '',
'foo[city]' => ''
));
$crawler = $this->client->submit($form);
echo $crawler->filter('html:contains("This value should not be blank")')->count(); // Should display 2, not 1
}
你有什么想法吗?
答案 0 :(得分:6)
您使用的选择器html:contains("This value should not be blank")
表示获取包含<html>
字符串的每个"This value should not be blank"
标记。即使此字符串存在两次,每页只有一个<html>
标记,因此您永远不会计算2个已过滤的项目。
解决方案是使用更具体的规则:
$crawler->filter('div:contains("This value should not be blank")')
使用包含错误消息的标记名称。默认情况下它是<div>
,但您可能已在Twig模板中更改了此内容。