duan1983 2014-01-31 13:03
浏览 52
已采纳

Symfony2测试:使用html过滤:包含返回一个值

I want to test my Symfony2 application with PHPUnit when a user submits a form without any data.

My validations are activared, so error messages are displayed correctly in a navigator. For example in the entity :

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;

}

And the type of this entity :

class FooType extends AbstractType
{
    /**
     * @param FormBuilderInterface $builder
     * @param array $options
     */
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('name', 'text')
            ->add('city', 'text');
    }

    // ...
}

When I submit the form without any data, the response contains 2 messages "This value should not be blank".

So in my tests I want to retrieve this 2 messages, but the filter function just returns 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
}

Have you got any idea please ?

  • 写回答

1条回答 默认 最新

  • duanhe8280 2014-01-31 17:25
    关注

    The selector html:contains("This value should not be blank") that you use means get every <html> tag containing the "This value should not be blank" string. Even if this string is present twice, there is only one <html> tag per page, so you will never count 2 filtered items.

    The solution is to use a more specific rule:

    $crawler->filter('div:contains("This value should not be blank")')
    

    Use the name of the tag which contains your error messages. By default it's <div> but you may have changed this in your Twig template.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 基于双目测规则物体尺寸
  • ¥15 wegame打不开英雄联盟
  • ¥15 公司的电脑,win10系统自带远程协助,访问家里个人电脑,提示出现内部错误,各种常规的设置都已经尝试,感觉公司对此功能进行了限制(我们是集团公司)
  • ¥15 救!ENVI5.6深度学习初始化模型报错怎么办?
  • ¥30 eclipse开启服务后,网页无法打开
  • ¥30 雷达辐射源信号参考模型
  • ¥15 html+css+js如何实现这样子的效果?
  • ¥15 STM32单片机自主设计
  • ¥15 如何在node.js中或者java中给wav格式的音频编码成sil格式呢
  • ¥15 不小心不正规的开发公司导致不给我们y码,