Có thể sử dụng thước đo góc và Karma cùng nhau không?


104

Nếu Protractor đang thay thế Angular Scenario Runner để thử nghiệm E2E, điều đó có nghĩa là tôi vẫn có thể sử dụng nó với Karma làm khung thử nghiệm E2E của mình?


IMO bạn sẽ có thể. Karma chỉ là người chạy thử. Khi bạn viết / xây dựng các trường hợp thử nghiệm của mình trong Thước đo góc, thì karma sẽ có thể chạy nó khi được yêu cầu. Theo cách tương tự, bạn có thể yêu cầu Karma chạy các bài kiểm tra E2E hiện tại.
skeep

1
@skeep Webdriver sinh sản và kết nối với các trình duyệt thông qua giao thức WebDriver - thứ mà Karma không hỗ trợ (nó sử dụng WebSockets và một trang web thay thế). Họ thực hiện các nhiệm vụ tương tự theo những cách rất khác nhau. Các bài kiểm tra Karma E2E hiện không dùng nữa không sử dụng WebDriver và phải chịu đựng nó - chúng phải duy trì trạng thái bên trong trình duyệt (trạng thái WebDriver hoàn toàn nằm ngoài quy trình của trình duyệt).
Andy

Câu trả lời:


102

Không được khuyến nghị bởi nhà bảo trì hiện tại của Thước đo góc:

https://github.com/angular/protractor/issues/9#issuecomment-19927049

Thước đo góc và Karma không nên được sử dụng cùng nhau; thay vào đó họ cung cấp các hệ thống riêng biệt để chạy thử nghiệm. Thước đo góc và Karma bao gồm các khía cạnh khác nhau của thử nghiệm - Karma chủ yếu dành cho các thử nghiệm đơn vị, trong khi Thước đo góc nên được sử dụng cho thử nghiệm đầu cuối.

Protractor được xây dựng trên nền WebDriverJS, sử dụng máy chủ Selenium / WebDriver để cung cấp trình duyệt và thúc đẩy thực thi kiểm tra. Có thể tìm thấy các ví dụ về WebDriverJS thuần túy tại đây: http://code.google.com/p/selenium/wiki/WebDriverJs

https://github.com/angular/protractor/issues/9#issuecomment-19931154

Georgios - tôi nghĩ việc giữ riêng biệt Thước đo và Karma - đối với các bài kiểm tra đầu cuối, bạn muốn điều khiển sự kiện gốc và tính linh hoạt của webdriver, trong khi đối với các bài kiểm tra đơn vị, bạn muốn thực thi nhanh chóng và tự động khớp các tệp.


Điều này có còn đúng khi chúng ta không nên chạy Thước đo góc khỏi Karma?
ErikAGriffin

@theLateWizard Hoàn toàn đúng, không chỉ bạn không nên, bạn có thể không :)
Dmitri Zaitsev

74

CẬP NHẬT. Đây là một gói đơn giản mà tôi đã tạo để thêm thiết lập Karma tối thiểu vào bất kỳ dự án nào bằng một lệnh duy nhất npm install min-karma.


Tôi muốn làm rõ một số quan niệm sai lầm có thể có về KarmaThước đo góc . Karma FAQ thực sự đề cập đến Bộ điều hợp cho Trình chạy tình huống của Angular , tuy nhiên, có vẻ như đã bị bỏ qua, với Thước đo góc được khuyến nghị thay thế.


Nghiệp

Karma là một trình chạy thử nghiệm sẽ chạy các tệp JavaScript được chỉ định trong tệp cấu hình của bạn một cách rõ ràng hoặc sử dụng node-globs . (Đối với các mẫu bên ngoài không phải JavaScript , Hướng dẫn Kiểm tra Đơn vị của Angular khuyên bạn nên sử dụng bộ tiền xử lý html Karma để biên dịch chúng thành JavaScript trước.)

Đây có thể là tất cả các tệp nguồn của bạn, một số tệp, một số tệp cộng với một số tệp bổ sung hoặc tệp không liên quan đến dự án của bạn, chỉ cung cấp một số cấu hình bổ sung - bạn đặt tên cho nó! Bạn có thể có nhiều tệp cấu hình karma cho các mục đích khác nhau, bạn có thể chạy song song hoặc từng tệp một. Mỗi tiến trình nghiệp khởi chạy một bộ trình duyệt riêng của nó (những trình duyệt này hiện có sẵn) .

Đây tính năng của Karma chạy chỉ là một bộ các tập tin là những gì làm cho nó hoàn hảo cho các bài kiểm tra nhanh chóng chạy ở chế độ nền theo từng tập tin nguồn chỉnh sửa và nhận được phản hồi ngay lập tức, đó là rực rỡ! Tiêu cực duy nhất là báo cáo lỗi "ồn ào" hy vọng sẽ được cải thiện!


Karma không chỉ dành cho các bài kiểm tra đơn vị

Kiểm tra đơn vị dành cho một đơn vị mã nguồn của bạn. Trong trường hợp của Angular, một đơn vị điển hình là Angular Component ( Service, Factory, Provider, Controller, Filter, Directivevv). Hãy nhớ giữ Controllersmỏng của bạn , vì vậy quá nhiều bài kiểm tra đơn vị cho máy tạo độ trễ là một dấu hiệu đỏ .

Trong thử nghiệm đơn vị , mọi đơn vị mã khác, mà đơn vị này phụ thuộc vào (cái gọi là phụ thuộc của đơn vị) không nên được kiểm tra cùng một lúc. Thay vào đó, chúng nên được "chế nhạo", ví dụ như được thay thế bằng một cái gì đó đơn giản như cá thể giả. Angular cung cấp hỗ trợ môi trường giả lập tuyệt vời . Lý tưởng nhất là bạn muốn xem tất cả các mô phỏng đó trực tiếp bên trong các thử nghiệm của mình, vì vậy bạn không bao giờ cần phải tự hỏi tất cả những phụ thuộc đó đến từ đâu.

Karma cũng hữu ích cho Kiểm tra tích hợp , trong đó một nhóm các đơn vị mã nguồn được kiểm tra cùng nhau, chỉ với một số phụ thuộc của chúng bị chế nhạo. Điều quan trọng cần nhớ là mọi phụ thuộc đều được cung cấp theo mặc định từ các mô-đun mã nguồn của bạn (miễn là các mô-đun đó hoặc được đưa trực tiếp vào các thử nghiệm của bạn hoặc chúng là các phụ thuộc của các mô-đun khác được đưa vào (trong trường hợp đó bạn không cần phải đưa chúng vào) nhưng không có hại gì khi làm như vậy). Các phần phụ thuộc bị chế nhạo sẽ ghi đè các phần được cung cấp.

Chạy nhanh và thường xuyên là tính năng chính của Karma . Điều này có nghĩa là bạn muốn tránh bất kỳ yêu cầu máy chủ nào, bất kỳ truy vấn cơ sở dữ liệu nào, bất kỳ thứ gì có thể mất nhiều thời gian hơn vài giây. ( Nếu không nó sẽ KHÔNG nhanh! ) Những quy trình dài đó là những quy trình mà bạn muốn chế nhạo . Điều này cũng giải thích lý do tại sao việc đặt các dịch vụ cấp thấp thô như $httptrực tiếp vào bên trong bộ điều khiển của bạn hoặc bất kỳ đơn vị logic nghiệp vụ phức tạp nào là một việc làm không tốt . Bằng cách gói các dịch vụ liên lạc bên ngoài cấp thấp đó thành các dịch vụ chuyên dụng nhỏ hơn, bạn sẽ dễ dàng "chế nhạo chúng" hơn nhiều.

Những gì Karma không làm là chạy trang web của bạn như nó vốn có, đó là thử nghiệm End-to-End (E2E). Về nguyên tắc, bạn có thể sử dụng các phương pháp nội bộ của Angular để tạo lại trang web hoặc các phần của nó. Điều này, đối với những phần nhỏ, có thể hữu ích và là một cách nhanh chóng, ví dụ như để kiểm tra các chỉ thị.

Tuy nhiên, đây không phải là cách được khuyến nghị để ném mã phức tạp vào bên trong các thử nghiệm của bạn. Bạn càng làm điều đó, bạn càng có nhiều khả năng mắc lỗi trong đó thay vì những gì bạn đang thực sự thử nghiệm.

Đó là lý do tại sao cá nhân tôi không thích cách thường được đề cập đến phức tạp của các phương pháp kiểm tra bằng cách sử dụng các phương pháp cấp thấp như $http. Nó hoạt động sạch hơn để cô lập bất kỳ tham chiếu nào đến các phương thức cấp thấp thành các phương thức chuyên dụng của riêng bạn, người có trách nhiệm duy nhất là thực hiện các yêu cầu http. Các phương pháp chuyên dụng này sẽ có thể hoạt động với chương trình phụ trợ thực sự chứ không phải phương pháp giả mạo! Bạn có thể dễ dàng kiểm tra - theo cách thủ công hoặc thậm chí hoàn toàn ổn khi Karma chạy với một cấu hình đặc biệt khác , miễn là bạn không trộn cấu hình đó với cấu hình thường được sử dụng để chạy Karmathường xuyên và nhanh chóng. Giờ đây, khi các dịch vụ nhỏ chuyên dụng của bạn được thử nghiệm, bạn có thể mô phỏng chúng một cách an toàn và dễ dàng để kiểm tra logic khác của mình và đưa các thử nghiệm này vào thiết lập Karma thông thường của bạn .


Để tóm tắt. Sử dụng Karma để chạy bất kỳ bộ tệp JavaScript nào. Nó (nên) nhanh. Bạn không thấy ứng dụng hoàn chỉnh của mình nên không thể kiểm tra kết quả cuối cùng một cách hiệu quả và đáng tin cậy. Tôi có chạy nó với Thước đo góc không? Tại sao tôi sẽ? Chạy Thước đo góc sẽ làm chậm các bài kiểm tra của tôi, đánh bại mục đích của Karma . Có thể dễ dàng chạy Thước đo góc riêng biệt.


Thước đo góc

Thước đo góc là:

khung kiểm tra end-to-end cho các ứng dụng AngularJS. Protractor chạy các bài kiểm tra đối với ứng dụng của bạn đang chạy trong trình duyệt thực, tương tác với nó như người dùng vẫn làm.

Vì vậy, thước đo góc làm chính xác những gì Karma không - chạy ứng dụng cuối cùng thực sự của bạn. Điều này cho thấy cả sức mạnh và hạn chế của nó:

Chạy ứng dụng hoàn chỉnh là bài kiểm tra cuối cùng đáng tin cậy duy nhất mà ứng dụng của bạn hoạt động như mong đợi. Bạn có thể viết ra các kịch bản câu chuyện người dùng hoàn chỉnh và đưa chúng vào thử nghiệm của mình!

Nhưng sẽ khó hơn để theo dõi lỗi mà không cô lập các đơn vị riêng lẻ trong mã nguồn của bạn. Đây là lý do tại sao bạn vẫn cần Karma kiểm tra mã JavaScript của mình trước.


Bây giờ tôi có muốn chạy Thước đo góc với Karma không? Tôi chắc chắn có thể chạy song song chúng trong các cửa sổ đầu cuối riêng biệt. Về nguyên tắc, tôi có thể yêu cầu họ chia sẻ các tệp thử nghiệm nếu tôi cần, nhưng thông thường thì tôi không muốn. Tại sao? Bởi vì tôi muốn giữ cho các thử nghiệm của mình nhỏ gọn với mục đích chuyên dụng duy nhất.

Ngoại lệ duy nhất sẽ là tệp xác định macro kiểm tra hữu ích cho cả hai người chạy. Tuy nhiên, đây sẽ không phải là tệp thử nghiệm mà là tệp định nghĩa macro .

Ngoài ra, tôi thích sự tách biệt rõ ràng giữa các bài kiểm tra của mình. Những thứ được chạy thường xuyên và nhanh chóng và những thứ dành cho ứng dụng hoàn chỉnh. Điều đó tạo nên sự tách biệt rõ ràng giữa khi sử dụng Karma và khi Thước đo góc .


Nếu tôi muốn kiểm tra đơn vị cũng như kiểm tra e2e thì tôi phải định cấu hình môi trường karma cho kiểm tra đơn vị và thước đo góc để kiểm tra ui hoặc kiểm tra e2e?
Sunil Garg

@SunilGarg Có, nếu muốn sử dụng cả hai, nhưng như tôi đã viết, Karma không chỉ dành cho thử nghiệm đơn vị.
Dmitri Zaitsev

1

Karma là một trình chạy thử nghiệm được cung cấp bởi nhóm Angular, Karma sẽ thực hiện các thử nghiệm của bạn trên nhiều trình duyệt để đảm bảo rằng ứng dụng của chúng tôi tương thích trên tất cả các trình duyệt. Unit Test cho js có góc cạnh có thể được sử dụng karma + jasmine

Jasmine là một khung kiểm tra đơn vị javascript và sẽ cung cấp cho chúng tôi các tiện ích để kiểm tra ứng dụng của chúng tôi. Điều này hoạt động tốt nhất trên khung công tác Angular và do đó, lựa chọn của chúng tôi về “công cụ kiểm tra đơn vị tự động”. https://github.com/shahing/testingangularjs

Và Protractor là một khung kiểm tra end-to-end cho các ứng dụng Angular và AngularJS. Protractor chạy các bài kiểm tra đối với ứng dụng của bạn đang chạy trong trình duyệt thực, trình duyệt không có đầu, kiểm tra trình duyệt chéo và có thể được lưu trữ trên saucelabs.

https://github.com/shahing/Protractor-Web-Automation


1

Có, bạn có thể sử dụng karma và thước đo góc cùng nhau. Karma được sử dụng để kiểm tra đơn vị thành phần bạn đã tạo bằng lệnh angle, bạn có thể kiểm tra các thành phần đó bằng cách sử dụng karma. Thước đo góc được sử dụng để kiểm tra đầu cuối. Nó chủ yếu được sử dụng để thử nghiệm giao diện người dùng.


Để đạt được điều này, bạn cần phải thêm cấu hình cho cả nghiệp chướng và thước đo góc
Rahul Solanki
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.