Làm cách nào để đọc Báo cáo Bảo hiểm Istanbul?


131

Tôi đã luôn sử dụng Jasmine cho các bài kiểm tra đơn vị của mình, nhưng gần đây tôi đã bắt đầu sử dụng Istanbul để cung cấp cho tôi các báo cáo bảo hiểm mã. Ý tôi là tôi hiểu ý chính của những gì họ đang cố nói với tôi, nhưng tôi không thực sự biết mỗi phần trăm này đại diện cho điều gì (Stmts, Branches, Funcs, Lines). Cho đến nay Googling tôi đã không thể tìm thấy một lời giải thích / tài nguyên vững chắc.

Câu hỏi : Giống như tôi đã nói tôi hiểu ý chính của nó, nhưng ai đó có thể đăng một lời giải thích phù hợp hoặc một liên kết đến một lời giải thích phù hợp không?

Câu hỏi thứ ba : Có cách nào để xác định phần cụ thể nào trong mã của bạn không được bảo hiểm không? Cho đến nay mà không thực sự mò mẫm báo cáo này về cơ bản tôi đang đoán.

-------------------|-----------|-----------|-----------|-----------|
File               |   % Stmts |% Branches |   % Funcs |   % Lines |
-------------------|-----------|-----------|-----------|-----------|
   controllers/    |      88.1 |     77.78 |     78.57 |      88.1 |
      dashboard.js |      88.1 |     77.78 |     78.57 |      88.1 |
-------------------|-----------|-----------|-----------|-----------|
All files          |      88.1 |     77.78 |     78.57 |      88.1 |
-------------------|-----------|-----------|-----------|-----------|

3
Chạy istanbul cũng sẽ tạo một tệp HTML cho báo cáo (nên có trong thư mục bảo hiểm). HTML này sẽ cung cấp cho bạn thông tin chi tiết khi bạn nhấp vào tệp / thư mục
Yaron Schwimmer

Cảm ơn @yarons. Điều đó chắc chắn giúp đi sâu vào phạm vi bảo hiểm và xác định những gì cụ thể không được bảo hiểm. Tôi vẫn chưa thực sự hiểu sâu về tỷ lệ phần trăm có nghĩa là gì = /.
Scott Sword

Câu trả lời:


217

Có một số tiêu chí bảo hiểm, những tiêu chí chính là:

  • Phạm vi chức năng Có phải mỗi chức năng (hoặc chương trình con) trong chương trình đã được gọi?
  • Bảo hiểm tuyên bố Có từng tuyên bố trong chương trình đã được thực hiện?
  • Phạm vi chi nhánh Có phải mỗi nhánh (còn gọi là đường dẫn DD) của từng cấu trúc điều khiển (chẳng hạn như trong câu lệnh if và case) đã được thực thi không? Ví dụ, được đưa ra một câu lệnh if, cả hai nhánh đúng và sai đã được thực thi chưa? Một cách khác để nói điều này là, có phải mọi cạnh trong chương trình đã được thực thi?
  • Phạm vi bảo hiểm có mỗi dòng thực thi trong tệp nguồn được thực thi?

Đối với mỗi trường hợp, tỷ lệ phần trăm đại diện cho mã được thực thi so với không được thực thi , bằng với mỗi phân số ở định dạng phần trăm (ví dụ: 50% các nhánh, 1/2).

Trong báo cáo tập tin:

  • 'E' là viết tắt của 'đường dẫn khác không được thực hiện', có nghĩa là đối với câu lệnh if / other được đánh dấu, đường dẫn 'if' đã được kiểm tra nhưng không phải là 'đường dẫn khác'.
  • 'I' là viết tắt của 'nếu đường dẫn không được thực hiện', đó là trường hợp ngược lại: 'nếu' chưa được thử nghiệm.
  • Các xNở cột bên trái là số lần mà dòng đã được thực hiện.
  • Các dòng không được thực thi hoặc các đoạn mã sẽ được tô sáng màu đỏ.

Điều này đã được xác minh cho Istanbul v0.4.0, tôi không chắc liệu điều này có còn áp dụng cho các phiên bản tiếp theo hay không, nhưng vì thư viện đó dựa trên các nguyên tắc lý thuyết vững chắc, hành vi không nên thay đổi quá nhiều cho các phiên bản mới hơn.

Nó cũng cung cấp một số mã màu -

Màu hồng : báo cáo không được bảo hiểm.

Orange : chức năng không được bảo hiểm.

Màu vàng : cành không phủ.

Tài liệu đầy đủ Istanbul ở đây:

https://istanbul.js.org

Đối với lý thuyết sâu hơn về phạm vi bảo hiểm mã:

https://en.wikipedia.org/wiki/Code_coverage

Hy vọng nó giúp!


8

Chạy istanbul cũng sẽ tạo một tệp HTML cho báo cáo (nên có trong thư mục bảo hiểm). HTML này sẽ cung cấp cho bạn thông tin chi tiết khi bạn nhấp vào tệp / thư mục.

Tỷ lệ phần trăm của các hàm được bao phủ được tính bằng số lượng hàm được gọi trong các thử nghiệm, chia cho tổng số hàm. Tương tự với các dòng và câu lệnh (thường sẽ gần nhau trừ khi bạn có câu lệnh rất dài). Chi nhánh có nghĩa là điểm quyết định như if-elsekhối. Ví dụ: giả sử mã của bạn chỉ chứa một if-elsecâu lệnh và các bài kiểm tra của bạn chỉ chuyển qua ifphần đó chứ không phải elsephần đó, thì tỷ lệ chi nhánh của bạn phải là 50%.

Hy vọng rằng làm cho mọi thứ rõ ràng hơn.


Tôi chạy istanbul bằng cách chỉ định "test" : "nyc mocha"trong package.json. Thư mục bảo hiểm của tôi là trống. Suy nghĩ?
TheCrazyProgrammer

1
Tôi đã thêm phóng viên html. Nó hoạt dộng bây giờ. "test" : "nyc --reporter=html mocha"
TheCrazyProgrammer

Ví dụ: nếu bạn có nhánh if lớn và nhánh nhỏ khác và chỉ nhánh if được chạy, vùng phủ sóng sẽ trông rất tuyệt nhưng độ phủ của nhánh vẫn chỉ là 50%. Ngoài ra, bạn có thể có nhiều câu lệnh trên mỗi dòng nếu các câu lệnh được phân tách bằng dấu chấm phẩy hoặc nếu dòng bao gồm một định nghĩa hàm (chứa các câu lệnh riêng của nó). Bạn có thể có nhiều dòng trên mỗi câu lệnh nếu câu lệnh bị ngắt dòng trước dấu chấm phẩy cuối cùng.
Hew Wolff

0

Thêm vào các câu trả lời trước

% Báo cáo được tính bằng cách lấy tỷ lệ phần trăm của số báo cáo được đề cập trong bài kiểm tra của bạn, ví dụ 12/18 * 100 = 66,67%. Điều này có nghĩa là bài kiểm tra của bạn chỉ bao gồm 66,67%.

% Branch cũng được tính theo cách tương tự. Tương tự cho% Hàm và% dòng của bạn.

Trong thư mục gốc dự án của bạn, có một thư mục bảo hiểm có chứa đầu ra HTML của bài kiểm tra của bạn. Click vào nó và xem nó trong trình duyệt. Bạn sẽ thấy một cái gì đó như thế này

Hình ảnh hiển thị đầu ra của kết quả kiểm tra của bạn

Tôi hy vọng điều này sẽ giúp bạn hiểu nó tốt hơn.

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.