Tôi đang viết một số mô-đun JavaScript có nghĩa là chạy trong trình duyệt (phía máy khách, không phải phía máy chủ). Mô-đun này đang sử dụng Google Maps JavaScript API.Cách viết kiểm tra đơn vị trên mã đang sử dụng Google Maps cho JS
Tôi muốn bao gồm mã của mình theo các bài kiểm tra đơn vị. Tôi cũng muốn các bài kiểm tra của tôi bị cô lập. Tôi đã tìm thấy severalvcr giống như JSlibraries để ghi và nhại các yêu cầu HTTP mà Google Maps Api đang tạo. Nhưng tất cả chúng đều dành cho Node.JS (vì PhantomJS doesn't support using fs
module). Node.JS cũng có nhiều backtraces phong phú và dễ đọc hơn PhantomJS.
Vì vậy, tôi tự hỏi làm cách nào để đưa API Javascript của Google Maps vào các thử nghiệm của tôi với thử nghiệm dựa trên Node.JS và cách viết thử nghiệm cho mã của tôi?
P.S. Tôi không gắn bó với một số thư viện thử nghiệm đơn vị JS nào đó. Nó có thể là Jasmine, QUnit hay bất kỳ thứ gì khác.
P.P.S Không cần thiết phải là Node.JS runner. Nếu có một lựa chọn khác, nó hoàn toàn OK!
P.P.P.S. Mục tiêu của tôi là để tránh những điều sau đây:
- để tránh sự phụ thuộc vào kết nối internet và sự chậm trễ tương ứng trong các thử nghiệm
- để tránh kiểm tra thất bại vì thay đổi một số dữ liệu GEO trên các máy chủ của Google. Ví dụ: nếu tôi sử dụng chỉ đường, tôi không thực sự quan tâm nếu nó là 2000 mét hoặc 2001 mét, tôi chỉ muốn biết rằng tôi nhận được một số dữ liệu thích hợp từ Google và thực hiện một số phép tính với nó.
P.P.P.P.S. Nhờ @MichaelGeary answer chúng tôi biết rằng Google chỉ lưu 3 phiên bản API của họ. Nhưng tôi không chỉ tập trung vào Google Maps, tôi đã chọn nó trong câu hỏi đó vì nó phổ biến/tôi có cùng câu hỏi được áp dụng cho bất kỳ bản đồ api nào khác như Yandex.Maps, Leaflet (with openstreet), Bing và v.v. API, vì vậy tôi có thể sửa phiên bản và dựa vào việc không thay đổi API nội bộ và các yêu cầu HTTP.
Ngoài ra tôi muốn tránh địa ngục giả, vì mã của tôi khá phức tạp và sử dụng rất nhiều đối tượng địa lý thuộc loại khác nhau. Vì vậy, sẽ không dễ dàng giả lập tất cả chúng và sau đó hỗ trợ mã đó. Nó trông giống như điều không thể chịu nổi.
Ý tưởng của tôi là sửa phiên bản API một thời gian (trong trường hợp của Google trong thời gian không lâu) và dựa vào sự kiên trì của định dạng yêu cầu HTTP nội bộ. Và theo thời gian xóa tất cả dữ liệu được ghi lại để chắc chắn rằng mọi thứ vẫn OK trong thế giới thực.
Tôi muốn bản thân mình là người kiểm soát thời điểm tôi nên sửa bài kiểm tra của mình. Tôi không muốn Google phá vỡ các bài kiểm tra của tôi vào thời điểm ngẫu nhiên.
Một điều bạn chắc chắn * không * muốn làm là sử dụng thư viện ghi lại và phát lại các yêu cầu HTTP mà JavaScript Maps API sử dụng. Các URL và phản hồi yêu cầu này không có giấy tờ, riêng tư đối với mã API Maps và có thể thay đổi bất kỳ lúc nào. Bất kỳ bài kiểm tra nào bạn viết đều chỉ dựa trên API được lập tài liệu, nếu không bạn sẽ thấy các bài kiểm tra của mình không tự ý khi Google thay đổi nội dung API. –
@MichaelGeary, mục tiêu của tôi là tránh một số thứ: 1) để tránh sự phụ thuộc vào kết nối internet và sự chậm trễ tương ứng 2) để tránh bị lỗi do thay đổi một số dữ liệu GEO trên máy chủ của Google.Ví dụ: nếu tôi sử dụng chỉ đường, tôi không thực sự quan tâm nếu nó là 2000 mét hoặc 2001 mét, tôi chỉ muốn biết rằng tôi nhận được một số dữ liệu thích hợp từ Google và thực hiện một số phép tính với nó. Vì vậy, tôi không muốn phát lại các yêu cầu HTTP về sản xuất hoặc thậm chí trong các thử nghiệm. Tôi chỉ muốn thử tất cả các yêu cầu HTTP để làm cho các bài kiểm tra của tôi bị cô lập. – petRUShka
Điều này nghe có vẻ nhiều hơn với tôi như thử nghiệm chức năng. Quả thực bản thân Phantomjs không có API cho điều đó nhưng [Casper.js] (http://casperjs.org/) sẽ tốt. –