sen*_*ett 5 php unit-testing symfony-forms symfony
我想对自定义的验证进行单元测试FormTypeInterface。
我有一个自定义表单类型设置如下:
class HiddenFieldType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('name', 'text', [
'constraints' => [
new NotBlank([
'message' => 'hiddenfield-invalid'
])
]
]);
}
public function getName()
{
return 'hiddenfield';
}
}
Run Code Online (Sandbox Code Playgroud)
我想通过实例化表单对象来测试约束是否成立。从Symfony 文档中,我想出了这个:
public function testValidation()
{
$formData = [
'name' => null // blank value
];
$hiddenFieldType = new HiddenFieldType();
$form = $this->factory->create($hiddenFieldType);
// submit the data to the form directly
$form->submit($formData);
var_dump($form->isValid()); die;
}
// factory is set up as per http://stackoverflow.com/a/27035802/614523
protected function setUp()
{
parent::setUp();
$validator = $this->getMock('\Symfony\Component\Validator\ValidatorInterface');
$validator->method('validate')->will($this->returnValue(new ConstraintViolationList()));
$formTypeExtension = new FormTypeValidatorExtension($validator);
$this->factory = Forms::createFormFactoryBuilder()
->addExtensions($this->getExtensions())
->addExtension(new HttpFoundationExtension())
->addTypeExtension($formTypeExtension)
->getFormFactory();
}
Run Code Online (Sandbox Code Playgroud)
我目前的理解告诉我$form->isValid()应该返回false这里(这是它在控制器和文档中的使用方式,但只要包含字符串$form->isValid()就总是返回。true$formData['name']
我还尝试使用对象传递数据use Symfony\Component\HttpFoundation\Request:
public function testValidation($userInput, $isValid)
{
$formData = [
'name' => 'asdasd'
];
$hiddenFieldType = new HiddenFieldType();
$form = $this->factory->create($hiddenFieldType);
// submit the data to the form using the request object
$request = new Request($getParams = [], $postParams = $formData);
$form->handleRequest($request);
var_dump($form->isValid()); die;
}
Run Code Online (Sandbox Code Playgroud)
当我这样做时,总是返回 false,只要is 不为 null 且不是空字符串,$form->isValid()我就希望它返回 false 。true$formData['name']
我究竟做错了什么?
| 归档时间: |
|
| 查看次数: |
857 次 |
| 最近记录: |