2017-05-24 81 views
0

我想测试我的形成延伸TypeTestCase为什么工厂在测试表单中为空?

class ProjectTypeTest extends TypeTestCase 
{ 

    private $entityManager; 
    private $securityContext; 
    private $translator; 
    private $formFactory; 

    protected function setUp() 
    { 
     // mock any dependencies 
     $this->entityManager = $this->createMock("Doctrine\ORM\EntityManagerInterface"); 
     $this->securityContext = $this->createMock("Symfony\Component\Security\Core\SecurityContextInterface"); 
     $this->translator = $this->createMock("Symfony\Component\Translation\TranslatorInterface"); 
     $this->formFactory = $this->createMock("AppBundle\FormTemplate\Factory\FormFactory"); 

    }  

    public function testSubmitValidData() 
    { 

     $type = new ProjectType($this->entityManager,$this->securityContext, $this->translator, $this->formFactory); 


     $this->factory->create($type); 

    } 

} 

但是,当我打电话$this->factory->create($type),返回:

调用一个成员函数上的空创建()

factory属性为空!

我使用的是Symfony\Component\Form\Test\TypeTestCase,我也使用了use Symfony\Component\Form\Tests\Extension\Core\Type\TypeTestCase,并返回相同的结果。或者,我做的不好? 或者,我如何测试表格?

回答

1

问题是$this->factory未被初始化。这应该由FormIntegrationTestCase完成,它由TypeTestCase,然后由您的测试类扩展。

setUp()是覆盖原来的setUp(),初始化$this->factory,所以你应该调用父类之一:

protected function setUp() 
{ 
    parent::setUp(); 

    // mock any dependencies 
    $this->entityManager = $this->createMock("Doctrine\ORM\EntityManagerInterface"); 
    $this->securityContext = $this->createMock("Symfony\Component\Security\Core\SecurityContextInterface"); 
    $this->translator = $this->createMock("Symfony\Component\Translation\TranslatorInterface"); 
    $this->formFactory = $this->createMock("AppBundle\FormTemplate\Factory\FormFactory"); 

}  
+0

'这个 - > formFactory'不等于'$这个 - > factory' – jjoselon

+0

我有编辑我的答案,检查出来。 – Falc