Вы не разместили свой код формы, но я подозреваю, что проблема заключается в свободном интерфейсе, который использует метод add() конструктора. Если у вас есть несколько вызовов add() следующим образом:
$builder
->add('username')
->add('email')
->add(...)
->add(...)
->add('save', 'submit');
Тогда проблема возникнет после первого add(), потому что это не возвращает объект (отсюда и сообщение об ошибке «Вызов функции-члена add() для не-объекта»).
Если вы используете плавный стиль, вам нужно «обучить» соавтора $builder, чтобы phpspec/mockery мог возвращать один и тот же объект билдера для последовательных вызовов add():
$builder->add(Argument::any(), Argument::any())->willReturn($builder);
$this->buildForm($builder, []);
Я думаю, что формы Symfony 2 могут быть не лучшим кандидатом для тестирования phpspec, поскольку вы действительно хотите тестировать только общедоступный API для своих классов, а не тестировать код, которым вы не владеете (например, фреймворк/сторонние библиотеки) .
Тип формы, который вы тестируете, не является фактической формой, которая создается, это больше похоже на «чертеж», используемый для создания формы, когда это необходимо, поэтому я думаю, что сложнее проверить, что форма имеет определенные поля или параметры, и т. д., поскольку это не вызывается вашим кодом, это происходит автоматически, когда структура форм обрабатывает тип формы.
Работа по созданию реальной формы происходит внутри построителя, который в контексте этой спецификации типа формы является соавтором, а не реальным объектом построителя (и также не является вашим кодом для тестирования).
person
Damon Jones
schedule
03.07.2014