PHP-Symfony2单元测试表格提交
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了PHP-Symfony2单元测试表格提交,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含4449字,纯文字阅读大概需要7分钟。
内容图文
![PHP-Symfony2单元测试表格提交](/upload/InfoBanner/zyjiaocheng/679/85efc9aadfb0438fba9338e15ce2b6dd.jpg)
呈现时,我有一个看起来像这样的表格:
<form name="service_user_registration" method="post" action="" novalidate="novalidate">
<div>
<label for="service_user_registration_user_email" class="required">E-mail</label>
<input type="email" id="service_user_registration_user_email" name="service_user_registration[user][email]" required="required" size="30" class="sample_class" title="Sample title" placeholder="Your e-mail..." />
</div>
<div>
<label for="service_user_registration_account_name" class="required">Company name</label>
<input type="text" id="service_user_registration_account_name" name="service_user_registration[account][name]" required="required" placeholder="Your company name..." />
</div>
<button type="submit" id="service_user_registration_register" name="service_user_registration[register]" class="btn btn-primary">Register</button>
<input type="hidden" id="service_user_registration__token" name="service_user_registration[_token]" value="VzkWJQw-2p-1lfBJoT5xwNB4dR2reT47i0ZTZES9LqY" />
</form>
如果我输入的数据写在基础对象(即注册对象)中,我想对表单提交进行单元测试.我这样做如下,但是我不知道如何正确设置$data数组,因为字段的name属性似乎像一个数组.
class RegistrationTypeTest extends TypeTestCase
{
public function testSubmit()
{
$user = new User();
$account = new Account();
$registration = new Registration($user,$account);
$form = $this->factory->create(new RegistrationType(), $registration);
$data = array(
'service_user_registration[user][email]' => 'testing@test.com',
'service_user_registration[account][name]' => 'New company'
);
$form->submit($data);
$this->assertTrue($form->isSynchronized());
$formData = $form->getData();
$this->assertInstanceOf('Service\Bundle\UserBundle\Entity\Registration', $formData);
$this->assertEquals($data['service_user_registration[user][email]'], $formData->getUser()->getEmail());
$this->assertEquals($data['service_user_registration[account][name]'], $formData->getAccount()->getName());
}
}
后两个断言失败,因为Registration对象中的$formData的所有内容均为null,这在提交的字段都为空时应该是这种情况.我也像数组数组那样写了$data,但是没有改变任何东西.
编辑(添加的表单类型):
class RegistrationType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('user', new RegistrationUserType())
->add('account', new RegistrationAccountType())
->add('register', 'submit');
}
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
# Using cascade validation because Valid constraint can not have validation groups
$resolver->setDefaults([
'cascade_validation' => true,
'intention' => $this->getName()
]);
}
public function getName()
{
return 'service_user_registration';
}
}
class RegistrationUserType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('email', 'email');
}
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults(array(
'validation_groups' => array('registration'),
'data_class' => 'Service\Bundle\UserBundle\Entity\User',
'intention' => $this->getName()
));
}
public function getName()
{
return 'service_user_user_registration';
}
}
class RegistrationAccountType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('name', 'text');
}
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults(array(
'validation_groups' => array('registration'),
'data_class' => 'Service\Bundle\UserBundle\Entity\Account',
'intention' => $this->getName()
));
}
public function getName()
{
return 'service_user_account_registration';
}
}
解决方法:
然后人们继续抱怨TDD是愚蠢的,很难,很烂,最后是it’s dead …
帮自己一个忙,不要再尝试对单元测试进行单元测试了,您不应该首先进行单元测试.编写一些更高级别的测试.您至少有两个选择.
首先,您可以编写特定于该表单的集成测试,以在更广泛的上下文中测试其行为.例如,您可以创建表单的实例,将数据传递给它,然后测试从表单中获取的模型是否具有传递的数据.
其次,您可以编写涉及此表单的端到端测试.如果表格无法正常使用,则测试将失败.
由于端到端测试通常较慢,因此您实际上可以编写其中的一两个测试来测试您的代码在表单有效和无效时均正确运行.例如,当表单有效时,将保留一个模型并将用户重定向到某处.如果不是,则任何内容均不会保留,并且再次显示该表单以及先前输入的数据和验证消息.
然后,您可以编写一些特定于表单的集成测试,以测试数据输入的其他组合,以确保在这种情况下其行为正确.
实际上,如果您正在测试验证,则可以省略表单本身的集成测试,而直接在模型上编写测试以测试验证规则.但是您仍然需要端到端测试来测试应用程序的整体流程.
内容总结
以上是互联网集市为您收集整理的PHP-Symfony2单元测试表格提交全部内容,希望文章能够帮你解决PHP-Symfony2单元测试表格提交所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。