我开发了新类型,但我不知道如何测试它。 断言注释未加载且未调用验证。 谁能帮帮我?
class BarcodeType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->
add('price');
}
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'Bundles\MyBundle\Form\Model\Barcode',
'intention' => 'enable_barcode',
));
}
public function getName()
{
return 'enable_barcode';
}
}
A 具有以下用于存储表单数据的模型。
namepspace Bundles\MyBundle\Form\Model;
class Barcode
{
/**
* @Assert\Range(
* min = "100",
* max = "100000",
* minMessage = "...",
* maxMessage = "..."
* )
*/
public $price;
}
我开发了一些这样的测试,表单没有得到有效数据但它是有效的! (因为没有应用注解) 我尝试添加 ValidatorExtension 但我不知道如何设置构造函数参数
function test...()
{
$field = $this->factory->createNamed('name', 'barcode');
$field->bind(
array(
'price' => 'hello',
));
$data = $field->getData();
$this->assertTrue($field->isValid()); // Must not be valid
}
最佳答案
不确定为什么需要对表单进行单元测试。你不能对你的实体进行单元测试验证并用你的预期输出覆盖 Controller 吗? 在测试实体验证时你可以使用这样的东西:
public function testIncorrectValuesOfUsernameWhileCallingValidation()
{
$v = \Symfony\Component\Validator\ValidatorFactory::buildDefault();
$validator = $v->getValidator();
$not_valid = array(
'as', '1234567890_234567890_234567890_234567890_dadadwadwad231',
"tab\t", "newline\n",
"Iñtërnâtiônàlizætiøn hasn't happened to ", 'trśżź',
'semicolon;', 'quote"', 'tick\'', 'backtick`', 'percent%', 'plus+', 'space ', 'mich @l'
);
foreach ($not_valid as $key) {
$violations = $validator->validatePropertyValue("\Brillante\SampleBundle\Entity\User", "username", $key);
$this->assertGreaterThan(0, count($violations) ,"dissalow username to be ($key)");
}
关于forms - 测试 symfony 2 表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13158732/