6

Khi tôi cố gắng chạy python manage.py test trong (1.4) dự án Django của tôi, tôi nhận được lỗi:Testing chỉ dự án trong Django

ERROR: test_site_profile_not_available (django.contrib.auth.tests.models.ProfileTestCase) 
---------------------------------------------------------------------- 
Traceback (most recent call last): 
    File "/home/slacy/src/tmp/env/local/lib/python2.7/site-packages/django/contrib/auth/tests/models.py", line 29, in test_site_profile_not_available 
    del settings.AUTH_PROFILE_MODULE 
    File "/home/slacy/src/tmp/env/local/lib/python2.7/site-packages/django/utils/functional.py", line 215, in __delattr__ 
    delattr(self._wrapped, name) 
AttributeError: AUTH_PROFILE_MODULE 

Đây là documented trong một lỗi Django, với một recomendation các ứng dụng chỉ thử nghiệm cụ thể thay vì tất cả. Tuy nhiên dự án của tôi không có ứng dụng nào, models.py chỉ đơn giản nằm trong thư mục gốc của dự án. Để kiểm tra một cụ ứng dụng trong Django, nó trông giống như this:

$ ./manage.py test animals 
Note that we used animals, not myproject.animals. 

nghĩa là nó không thể chỉ định thư mục gốc để kiểm tra. Làm cách nào để kiểm tra thư mục dự án của tôi?

Lưu ý rằng lỗi này là một phần của larger discussion on unit testing discovery.

Trả lời

3

Tôi khuyên bạn nên sử dụng django-discover-runner. Nó cho phép bạn chỉ định và đường dẫn rải rác đầy đủ để kiểm tra.

If you just run ./manage.py test, it'll discover and run all tests underneath the TEST_DISCOVER_ROOT setting (a file system path). If you run ./manage.py test full.dotted.path.to.test_module, it'll run the tests in that module (you can also pass multiple modules). If you give it a single dotted path to a package (like a Django app) like ./manage.py test myapp and that package does not itself directly contain any tests, it'll do test discovery in all submodules of that package.

+2

Bắt đầu từ Django 1.6, có một [thử nghiệm khám phá mới Á hậu] (https://docs.djangoproject.com/en/dev/releases/1.6/#discovery-of-tests-in-any-test-module) làm chính xác những gì django-khám phá-runner làm cho 1.5 và dưới đây. – alfetopito

0

Tạo một thư mục mới mang tên ứng dụng, di chuyển toàn bộ ứng dụng của bạn vào nó trừ đi settings.py, manage.py, urls.py và bất cứ điều gì khác được thêm vào theo mặc định bởi startproject django-admin.py và sau đó chạy

./manage.py test apps 

Trong tương lai, tránh giữ toàn bộ ứng dụng của bạn trong một thư mục. Tách riêng nó thành các ứng dụng phụ dựa trên chức năng, vì lý do này, chính là

+0

Nhưng dự án của tôi chỉ có bốn mô hình và tất cả chúng đều có liên quan đến tôi. Tôi không nghĩ rằng đó là sai lầm khi chỉ có một dự án không có ứng dụng trong đó, miễn là nó không quá lớn. –

+0

Cho đến khi một giải pháp khác xuất hiện, tôi đoán tôi sẽ chỉ tạo một ứng dụng và đặt mọi thứ vào đó. –

+0

Tôi đã tách dự án của mình và nhận ra rằng trên thực tế nó rất hữu ích. –

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