【发布时间】:2017-12-22 01:27:57
【问题描述】:
我想开始使用 PHPUnit 测试我的表单。 首先我创建了一个简单的表单。
final class LoginFormType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('username', TextType::class);
$builder->add('password', PasswordType::class);
$builder->add('submit', SubmitType::class);
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'data_class' => LoginFormData::class
));
}
}
我定义了一个 data_class。此类稍后将执行验证等。但目前这应该没问题。我在浏览器中测试了表单,它运行良好。 目前它只有2个公共财产。 “用户名”和“密码”。
之后我关注了文档https://symfony.com/doc/3.3/form/unit_testing.html
然后我以这个测试用例结束。
function it_submits_valid_data()
{
$data = new LoginFormData();
$data->username = 'John';
$data->password = 'yoloyolooooo';
$form = $this->factory->create(LoginFormType::class);
$form->submit($data);
$this->assertTrue($form->isSynchronized());
$this->assertEquals($data, $form->getData());
$this->assertTrue($form->isValid());
$view = $form->createView();
$children = $view->children;
foreach (array_keys($data) as $key) {
$this->assertArrayHasKey($key, $children);
}
}
但它不起作用。 我收到以下错误
有 1 次失败:
断言失败 假的就是真的。
这发生在这一行 $this->assertTrue($form->isSynchronized());
如果我调整表单以使用数组并在测试中传入一个数组,它工作正常。 我做错了什么?
--- 编辑 1
在 Lugi Hauges 回答后,我发现它在某处引发了 TransformationException。 (我没有看到它,因为它被抓住了)
因为我的表格是复合表格
if (!is_array($submittedData)) {
throw new TransformationFailedException('Compound forms expect an array or NULL on submission.');
}
我没有传递数组。所以我现在知道它扔在哪里了。 但不是为什么。我以为我可以使用 Data-Objects 我必须实现自定义数据映射器吗? 我认为这不应该是必要的,因为我的财产是公开的。
--- 编辑 2
啊啊啊,我必须传入一个数组。该数组将转换为我的数据对象。
【问题讨论】:
标签: php forms symfony unit-testing