2013-04-26 34 views
8

Tôi đang thực hiện một số kiểm tra chức năng cho một ứng dụng được thực hiện với Symfony2 (2.1) và tôi đang gặp sự cố.Thử nghiệm chức năng của Symfony2 - Nhấp vào các yếu tố có tương tác jQuery

Tôi có một số phần của trang web tải khi người dùng nhấp vào liên kết hoặc phần tử khác, nhưng những hành động này được thực hiện bằng cách sử dụng jQuery và $ .post cuộc gọi. Làm cách nào để tôi có được trình thu thập thông tin Symfony2 để thực hiện các cuộc gọi này?

Khi tôi làm một cái gì đó như thế này:

$link = $crawler->filter('ul.line_menu a')->eq(1)->link(); 
$crawler = $client->click($link); 

Crawler nhận được "href" của "a" yếu tố và khởi chạy nó, nhưng "href" là trống rỗng, và một "click()" chức năng được liên kết với phần tử này, ngăn chặn hành động nhấp chuột với "preventDefault()".

Cảm ơn mọi người !! :)

Trả lời

7

Kiểm tra chức năng của Symfony thực hiện mã của bạn bằng cách gọi trực tiếp hạt nhân Symfony. Chúng không chạy qua trình duyệt web và do đó không hỗ trợ javascript (đơn giản là không được thực hiện).

Nếu không thể chạy ứng dụng của bạn mà không có javascript, bạn phải sử dụng một công cụ khác để thử nghiệm chức năng. Một trong các tùy chọn là sử dụng Mink với một trong các trình điều khiển hỗ trợ javascript (như Selenium2).

1

Symfony không hỗ trợ javascript, Ajax, Jquery. Nó được sử dụng bởi phpunit để kiểm tra chức năng php. Nó đã không được thực hiện cho việc này.

Bạn có thể sử dụng casperjs. Với CasperJS bạn có thể làm bài kiểm tra chức năng của bạn như với trình thu thập thông tin của bạn trên Symfony và bạn nhận được tất cả mã javascript và css.

4

Tôi có thể sử dụng trình duyệt "không đầu" cho tác vụ này là PhantomJS.

PhantomJS là một WebKit không đầu có thể đọc được bằng API JavaScript. Nó có hỗ trợ nhanh và bản địa cho các tiêu chuẩn web khác nhau: xử lý DOM, công cụ chọn CSS, JSON, Canvas và SVG.

Để giảm bớt công việc của bạn, Bạn có thể sử dụng CasperJS

CasperJS là người bạn đồng hành cho PhatomJS mà mang lại một API được cải thiện đáng kể để giảm bớt việc tạo ra các quy trình công việc cào và tự động hóa.

Trong trường hợp của bạn, nơi ngữ cảnh web mà bạn đang cố gắng thu thập bao gồm nội dung động thông qua JQuery và AJAX, CasperJS là một tùy chọn tuyệt vời nếu bạn muốn sử dụng Javascript để đạt được điều đó. Bạn có thể sử dụng nó để kích hoạt các sự kiện, thêm các bước quy trình, bao gồm các chức năng để chờ và xác nhận sau mỗi cuộc gọi ajax trước để xử lý bất kỳ bước tiếp theo nào.

Dưới đây là một ví dụ như thế nào bò một trang web với CasperJS và JQuery: CasperJs and Jquery with chained Selects

Dưới đây là một ví dụ như thế nào bò một trang web với CasperJS và chỉ Javascript: CasperJS dynamic selectlists