2014-10-28 34 views
45

Tôi đã luôn 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 có được gist về những gì họ đang cố gắng nói với tôi, nhưng tôi thực sự không biết mỗi phần trăm này đại diện cho cái 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.Làm cách nào để đọc Báo cáo Bảo hiểm Istanbul?

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

Câu hỏi đại học: Có cách nào để xác định những phần cụ thể nào trong mã của bạn không được đề cập không? Cho đến nay mà không thực sự grokking báo cáo này tôi về cơ bản đ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 | 
-------------------|-----------|-----------|-----------|-----------| 
+0

Chạy istanbul cũng nên tạo tệp HTML cho báo cáo (nên nằm trong thư mục phủ sóng). 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 – yarons

+0

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 không thực sự hiểu * chiều sâu * ý nghĩa của tỷ lệ phần trăm = /. – Swordfish0321

Trả lời

66

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

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

Đối với mỗi trường hợp, tỷ lệ đại diện thực hiện đang vs không-thực hiện đang, bằng với mỗi phần ở định dạng phần trăm (Ví dụ: 50%, ngành, 1/2).

Trong báo cáo file:

  • 'E' đứng cho 'con đường khác không được thực hiện', có nghĩa là cho đánh dấu if/else tuyên bố, 'nếu' con đường đã được thử nghiệm nhưng không phải là 'khác' .
  • 'I' là viết tắt của 'if path not taken', trường hợp ngược lại: 'if' chưa được kiểm tra.
  • xN trong cột bên trái là số lần dòng được thực thi.
  • Đường không được thực hiện hoặc các đoạn mã sẽ được đánh dấu bằng màu đỏ.

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

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

hồng: báo cáo không được đề cập.

Cam: các chức năng không được đề cập.

Vàng: các chi nhánh không được bảo hiểm.

Full Istanbul tài liệu ở đây:

https://gotwarlost.github.io/istanbul/public/apidocs/index.html

Để biết thêm lý thuyết chuyên sâu về bảo hiểm mã:

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

Hy vọng nó sẽ giúp!

4

Chạy istanbul cũng nên tạo tệp HTML cho báo cáo (nên nằm trong thư mục phủ sóng). 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ệ hàm được bao gồm được tính bằng số hàm được gọi trong khi kiểm tra, 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 với nhau trừ khi bạn có các câu lệnh rất dài). Chi nhánh có nghĩa là các điểm quyết định như các khối if-else. Ví dụ: giả sử mã của bạn chỉ chứa một tuyên bố if-else và thử nghiệm của bạn chỉ đi qua phần if nhưng không phải là phần else, thì tỷ lệ phần trăm của chi nhánh của bạn phải là 50%.

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

+0

Tôi chạy istanbul bằng cách chỉ định '" test ":" nyc mocha "' trong 'package.json'. Thư mục vùng phủ sóng của tôi trống. Suy nghĩ? – TheCrazyProgrammer

+0

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

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