-1

在我的 Symfony 应用程序中,我目前正在按照文档编写表单测试。在联系表单中,验证数据后,我会清空表单以供进一步使用。我想在我的测试中检查这种行为。

我有 4 个字段,其中包含我在这里没有表示的几个约束:

public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder
        ->add('name', TextType::class)
        ->add('subject', TextType::class)
        ->add('email', EmailType::class)
        ->add('message', TextareaType::class)
    ;
} 

在我的测试中,我在扩展的类中使用以下函数WebTestCase

public function testContactForm(string $subject, string $name, string $email, string $message, int $nbErrors)
{
    $form_name = 'contact';

    //do some test, submit etc...

    //check that the form is cleaned if valid
    if (!$nbErrors) {
        $this->assertInputValueSame($form_name . '[subject]', '');
        $this->assertInputValueSame($form_name.'[name]', '');
        $this->assertInputValueSame($form_name . '[email]', '');
        $this->assertInputValueSame($form_name . '[message]', '');
    }
}

当然$this->assertInputValueSame($form_name . '[message]', '');不起作用,因为messagetextArea. 我因此尝试:

$this->assertSelectorTextContains('#'.$name.'_message', '');

但得到以下错误

mb_strpos():空分隔符

那么在 Symfony 4 中测试 textArea 输入是否为空的好方法是什么?

4

1 回答 1

0

如果你去定义assertInputValueSame

public static function assertInputValueSame(string $fieldName, string $expectedValue, string $message = ''): void
    {
        self::assertThat(self::getCrawler(), LogicalAnd::fromConstraints(
            new DomCrawlerConstraint\CrawlerSelectorExists("input[name=\"$fieldName\"]"),
            new DomCrawlerConstraint\CrawlerSelectorAttributeValueSame("input[name=\"$fieldName\"]", 'value', $expectedValue)
        ), $message);
    }

您会看到该函数正在寻找一个input分隔符,而textarea. 相反,您可以使用:

$this->assertSelectorTextSame('#'.$form_name.'_message', '');
于 2019-12-19T12:53:32.070 回答