2013-05-02 48 views
6

Tôi cố gắng để thử nghiệm một loại hình thức tôi đã tạo có sử dụng một lĩnh vực với lớp thực thểSymfony2 Tuỳ chỉnh hình thức loại sử dụng thực thể cố gắng thử nghiệm nó

đây là việc tạo ra các hình thức

$builder 
      ->add('name', 'text') 
      ->add('description', 'textarea') 
      ->add('services', 'entity', array('class' => 'MyBundle:Service', 'group_by' => 'category.name', 'property' => 'name', 'multiple' => true, 'required' => false)); 

này hoạt động rất tốt đẹp khi tôi xây dựng các hình thức, nhưng sau đó tôi đang cố gắng để đơn vị kiểm tra kiểu này

sau this example về cách kiểm tra các loại hình thức tùy chỉnh của tôi

tôi get ting lỗi này

Symfony \ Component \ Mẫu \ Exception \ Ngoại lệ: Không thể tải loại "thực thể"

Các lỗi được gây ra ở phần đầu của bài kiểm tra đơn vị theo lệnh này:

$type = new MyType(); 
    $form = $this->factory->create($type); 

bất kỳ ý tưởng về cách khắc phục lỗi này để kiểm tra loại biểu mẫu tùy chỉnh của tôi bằng cách sử dụng các thực thể?

cảm ơn trước

+0

Hiện nay, Symfony hỗ trợ EntityType ra khỏi hộp, nhưng không có một cách thích hợp để kiểm tra đơn vị nó: https://github.com/symfony/symfony/issues/15098. –

Trả lời

3

Tôi đoán bạn không thể đơn vị kiểm tra đơn vị với loại thực thể, vì nó được định nghĩa là dịch vụ. Bạn đã thử adding it manually chưa?

EDIT: IMHO bạn nên giả định loại thực thể, vì nó liên quan đến học thuyết, phụ thuộc vào kết nối cơ sở dữ liệu hiện có và do đó hạt nhân đầy đủ được nạp. Vì vậy, bạn không phải thử nghiệm đơn vị nữa. Đây sẽ là một thử nghiệm chức năng. Có lẽ đây là lý do, tại sao nó không có sẵn trong thử nghiệm đơn vị.

+0

Từ sự hiểu biết của tôi, phương pháp này được sử dụng khi một loại biểu mẫu phụ thuộc vào loại biểu mẫu khác, trong đó nguyên nhân của tôi là một thực thể đang được chuyển cho thực thể lựa chọn. Tôi đã quản lý để kiểm tra các loại biểu mẫu đơn giản nhưng không phải là loại sử dụng loại thực thể: ( – auslander

+0

Như trong bản chỉnh sửa của tôi, bạn nên giả định loại thực thể. –

0

Thêm null cho tham số thứ hai trong phương thức tạo.

$type = new MyType(); 
$form = $this->factory->create($type, null); 
1

Theo các tài liệu symfony dưới Adding a Type your Form Depends on

Để tạo biểu mẫu một cách chính xác, bạn cần phải thực hiện các loại cung cấp cho nhà máy hình thức trong thử nghiệm của bạn. Cách đơn giản nhất là để đăng ký nó bằng tay trước khi tạo form cha bằng cách sử dụng lớp PreloadedExtension :

class TestedTypeTest extends TypeTestCase 
{ 
    protected function getExtensions() 
    { 
     $childType = new TestChildType(); 
     return array(new PreloadedExtension(array(
      $childType->getName() => $childType, 
     ), array())); 
    } 

    public function testSubmitValidData() 
    { 
     $type = new TestedType(); 
     $form = $this->factory->create($type); 

     // ... your test 
    } 
}