16

Tôi đã tìm kiếm một chút về điều này và cố gắng triển khai giải pháp tự tạo nhưng cho đến nay vẫn chưa tự tin với nó.Thử nghiệm tích hợp JavaScript trong Ruby on Rails

Điều tôi cần là viết các bài kiểm tra tích hợp trong Ruby on Rails tương tác với JavaScript và nhận các cách lập trình để xác nhận một số hành vi. Tôi đang sử dụng Test :: Unit cho phần bộ điều khiển/mô hình nhưng tôi đang cố gắng kiểm tra một số hành vi jQuery/JavaScript được ứng dụng của tôi sử dụng. Chủ yếu nó bao gồm trong các cuộc gọi ajax và tương tác trong giao diện người dùng mà cập nhật một số bộ thông tin. Tôi đã không tìm thấy một giải pháp mà làm cho tôi tự tin và tích hợp độc đáo với autotest và toàn bộ quá trình màu đỏ-xanh, vì vậy bây giờ hầu hết các phần của mã phía khách hàng của tôi là chưa được kiểm tra và điều đó làm tôi lo lắng (vì nó nên là: P).

Vì vậy, có ai có đề xuất về các phương pháp hay nhất về vấn đề này không? Kiểm tra đơn vị JS là một chút khó khăn, như Crockford chỉ ra, bởi vì nó phụ thuộc rất nhiều vào tình trạng hiện tại của giao diện người dùng và vv và như AFAIK thậm chí ông đã không tìm thấy một cách tốt để thực hiện kiểm tra phong nha ...

Ngắn gọn : Tôi cần phải thực hiện các thử nghiệm cho một số hành vi giao diện người dùng phụ thuộc vào Ajax, tích hợp với autotest hoặc một số công cụ CI khác và không tìm thấy cách tốt và thanh lịch để thực hiện nó.

Cảm ơn tất cả sự quan tâm, Trân trọng

Trả lời

3

Vào tháng 4 năm 2011, các guys thinkbot updated their quest để thử nghiệm javascript. Akephalos đã giảm ưa chuộng vì những lý do sau đây:

Bugs: như đã đề cập trước đây, có lỗi trong HtmlUnit, đặc biệt với live của jQuery. Mặc dù tất cả các triển khai trình duyệt đều có lỗi nhưng sẽ hữu ích hơn nếu các thử nghiệm trải nghiệm cùng một lỗi như trình duyệt thực tế.

Khả năng tương thích: htmlunit không triển khai đầy đủ tính năng mà trình duyệt hiện đại làm. Ví dụ: nó không xử lý hoàn toàn các phạm vi DOM hoặc Tải lên tệp Ajax.

Hiển thị: htmlunit không thực sự hiển thị trang, do đó các thử nghiệm mà phụ thuộc vào khả năng hiển thị CSS hoặc vị trí sẽ không hoạt động.

Hiệu suất: khi hầu hết các thử nghiệm của bạn sử dụng Javascript, các bộ thử nghiệm có htmlunit bắt đầu thu thập dữ liệu. Phải mất một lúc để bắt đầu thử nghiệm với Akephalos và một bộ thử nghiệm lớn có thể dễ dàng mất 10 hoặc 15 phút.

Vì vậy, họ đã tự giải pháp của riêng họ là mã nguồn mở - capybara-webkit. Nó vẫn còn khá mới nhưng nó trông giống như con đường để đi ngay bây giờ.

4

AFAIK, bên ngoài của một sự kết hợp của Capybara với Selenium Web-Driver có rất ít lựa chọn để kiểm tra tự động mã JS. Tôi sử dụng dưa chuột với trình điều khiển web capybara và selenium và vì selenium-webdriver thực sự khởi chạy firefox hoặc chrome để kiểm tra một trang cụ thể với cuộc gọi ajax, Mất nhiều thời gian hơn để chạy qua một bộ kiểm tra.

Có một số lựa chọn thay thế nhưng chúng không hoạt động mọi lúc hoặc cho mọi tình huống. Ví dụ: Capybara with envjs

+0

Cảm ơn bạn đã liên kết với Capybara-envjs! Điều đó có thể được sử dụng bên ngoài thế giới Rails (ví dụ trên bất kỳ ứng dụng web cũ nào) không? –

2

article khuyến nghị Akephalos.

+0

Đó là những gì tôi đang tìm kiếm, kết hợp Capybara và một trình biên dịch đơn vị HTML/JS không có GUI, cảm ơn bạn! – victorcampos

2

Tôi đã sử dụng dưa chuột và capybara với selen. Điều này rất bực bội vì selen dường như không thể nhìn thấy javascript được tạo động, mặc dù thực tế là capybara được cho là đang chờ nó. Đó là vào tháng 1 năm 2011. Mọi thứ có thể khác.

Hiện tại, tôi đang sử dụng dưa leo và capybara có akephalos. Cho đến nay, nó đã rất khó khăn bởi vì 1. nó là không đầu, vì vậy bạn không thể nhìn thấy sự tiến bộ. Cuộc gọi "save_and_open" của Capybara đã giúp cho một mức độ. 2. jQuery và akephalos dường như không chơi độc đáo với nhau. Ví dụ, kích hoạt trên một nút radio với jchange của jquery.() Hoạt động tốt trong chrome, nhưng không có trong akephalos. Có lẽ điều này là có chủ ý bởi vì sau này tôi nghe ở đâu đó rằng nó không hoạt động trong IE. Tôi cố định vấn đề bằng cách sử dụng .click() thay vì .change() cho nút radio nhưng vì chức năng .change được thiết lập để chạy trên một loạt các câu hỏi, tôi đã phải mã đặc biệt để làm cho nó hoạt động cho thử nghiệm .

Điểm mấu chốt đối với tôi là thử nghiệm chấp nhận javascript tự động trong một đường dẫn env vẫn còn chưa trưởng thành và có thể có nhiều công việc đáng giá hơn.

Các vấn đề liên quan