Tôi đang sử dụng phpunit để chạy các kiểm tra chức năng nhưng tôi gặp sự cố với một vài biểu mẫu. Vấn đề là phpunit không nhận thức được JS, và tôi có một biểu mẫu với một hộp chọn tự động có nhu cầu jQuery.Symfony2 Kiểm tra chức năng: Truyền dữ liệu biểu mẫu trực tiếp
Vì vậy, tôi cần phải chuyển trực tiếp dữ liệu biểu mẫu. 'Sách' đưa ra ví dụ sau:
// Directly submit a form (but using the Crawler is easier!)
$client->request('POST', '/submit', array('name' => 'Fabien'));
Khi tôi sử dụng ví dụ này bộ điều khiển không nhận được bất kỳ dữ liệu biểu mẫu nào. Về cơ bản, tôi thấy rằng việc truyền tên khóa 'tên' không đúng trong trường hợp của tôi khi tôi cần tên biểu mẫu là 'timesheet' trong mã của tôi. Vì vậy, tôi đã thử một cái gì đó như:
$client->request('POST', '/timesheet/create', array('timesheet[project]' => '100'));
Nhưng điều này vẫn không hiệu quả. Trong bộ điều khiển, tôi đã cố gắng hiểu điều gì đang xảy ra và nếu bất cứ điều gì đã được nhận:
$postData = $request->request->get('timesheet');
$project = $postData['project'];
Dự án không hoạt động và $ vẫn trống. Tuy nhiên, nếu tôi đã sử dụng mã sau, tôi nhận được giá trị:
$project = $request->request->get('timesheet[project]');
Nhưng rõ ràng đó không phải là điều tôi muốn. Atleast mặc dù tôi có thể thấy rằng có một số dữ liệu POST. Lần thử cuối cùng của tôi là thử các phương pháp sau trong phương pháp thử:
$this->crawler = $this->client->request('POST', '/timesheet/create/', array('timesheet' => array(project => '100'));
Vì vậy, tôi đang cố chuyển mảng 'timesheet' làm phần tử đầu tiên của mảng tham số yêu cầu. Nhưng với điều này tôi nhận được lỗi:
Symfony\Component\Form\Exception\UnexpectedTypeException: Expected argument of type "array", "string" given (uncaught exception) at /mnt/hgfs/pmt/src/vendor/symfony/src/Symfony/Component/Form/Form.php line 489
Tôi sẽ rất vui nếu có ai đó có thể mở rộng những gì trong 'cuốn sách' về cách tôi phải làm việc này.
Mẫu ràng buộc trong điều khiển:
if ($request->getMethod() == 'POST') {
$form->bindRequest($request);
if ($form->isValid()) {
$postData = $request->request->get('timesheet');
$project = $postData['project'];
$timesheetmanager = $this->get('wlp_pmt.timesheet_db_access');
$timesheetmanager->editTimesheet($timesheet);
return $this->redirect($this->generateUrl('timesheet_list'));
}
}
thử cuối cùng của bạn có vẻ tốt đẹp đối với tôi. Vui lòng dán một phần bộ điều khiển của bạn vào nơi bạn liên kết biểu mẫu. Ngoài ra, bạn đã đọc chương tài liệu về kiểm tra chức năng (http://symfony.com/doc/2 chưa.0/book/testing.html # forms)? Bạn có thể thử thao tác với phần tử biểu mẫu. –
Tôi đã thêm phần bộ điều khiển có liên quan ngay bây giờ. Tôi đã đọc qua chương trong cuốn sách liên quan đến kiểm tra chức năng một vài lần bây giờ tìm kiếm bất cứ điều gì tôi có thể đã bỏ qua. Khi bạn đề xuất thao tác với phần tử biểu mẫu, bạn có muốn thêm dữ liệu trong thử nghiệm chức năng vào biểu mẫu không? Điều này là không thể vì biểu mẫu có lựa chọn động được điền bằng AJAX. Vì vậy, nó có sản phẩm nào và không có gì có thể được lựa chọn, do đó tôi cần phải POST nội dung hình thức để điều khiển. – DanF7