Hiện nay có một dự án cấu hình để chạy bảo hiểm thông qua quản lý lệnh của Django như vậy:Làm thế nào để kiểm tra vùng phủ sóng đúng với Django + Mũi
Điều này dẫn đến một báo cáo như sau:
Name Stmts Miss Branch BrMiss Cover Missing
--------------------------------------------------------------------------
notify.decorators 4 1 0 0 75% 4
notify.handlers 6 1 2 0 88% 11
notify.notification_types 46 39 2 0 19% 8-55, 59, 62, 66
notify.notifications 51 51 0 0 0% 11-141
--------------------------------------------------------------------------
TOTAL 107 92 4 0 17%
Tuy nhiên, có vấn đề với báo cáo này. Nó sai. Bảo hiểm là đánh dấu các dòng bị mất, mặc dù thực tế là chúng thực sự được bao phủ bởi các xét nghiệm. Ví dụ, nếu tôi chạy thử nghiệm qua nosetests
thay vì của django quản lý lệnh tôi nhận được báo cáo chính xác sau:
Name Stmts Miss Branch BrMiss Cover Missing
-----------------------------------------------------------------------------
notify.decorators 4 0 0 0 100%
notify.handlers 6 0 2 0 100%
notify.notification_types 46 0 2 0 100%
notify.notifications 51 25 0 0 51% 13, 18, 23, 28, 33, 38, 43, 48, 53, 65, 70, 75, 80, 85, 90, 95, 100, 105, 110, 116, 121, 126, 131, 136, 141
-----------------------------------------------------------------------------
TOTAL 107 25 4 0 77%
Google dẫn tôi Câu hỏi thường gặp trang web của bảo hiểm nhân, http://nedbatchelder.com/code/coverage/faq.html
Q: Tại sao các cơ quan chức năng (hoặc các lớp) hiển thị như được thực hiện, nhưng các dòng def không?
Điều này xảy ra vì phạm vi bảo hiểm được bắt đầu sau khi các hàm được xác định. Các dòng định nghĩa được thực hiện mà không có phép đo vùng phủ sóng, sau đó vùng phủ sóng được bắt đầu, sau đó hàm được gọi. Điều này có nghĩa là cơ thể được đo, nhưng định nghĩa của bản thân hàm đó thì không.
Để khắc phục điều này, hãy bắt đầu bảo hiểm trước đó. Nếu bạn sử dụng dòng lệnh để chạy chương trình của bạn với vùng phủ sóng, thì toàn bộ chương trình của bạn sẽ được giám sát. Nếu bạn đang sử dụng API, bạn cần gọi đến hàm coverage.start() trước khi nhập các mô-đun xác định các chức năng của bạn.
Câu hỏi đặt ra là tôi có thể chạy báo cáo bảo hiểm đúng cách thông qua lệnh quản lý của Django không? Hoặc tôi có phải bỏ qua quản lý để tránh tình huống bắt đầu bảo hiểm sau khi các dòng "thiếu" được thực thi không?
Đây là giải pháp tiện dụng nhất (mặc dù hacky) và hoạt động hoàn hảo và minh bạch với django-mũi – danigosa