2010-02-24 34 views
20

Ngay bây giờ, nếu tôi muốn chạy thử nghiệm từ tất cả các ứng dụng của tôi, tôi đi:Làm cách nào để chạy thử nghiệm cho tất cả các ứng dụng Django của tôi?

python manage.py test app1 app2 app3 

Nếu tôi chạy:

python manage.py test 

Các thử nghiệm của tất cả các ứng dụng trong INSTALLED_APPS đang chạy, bao gồm django những người. Có một lệnh đơn giản để chạy thử nghiệm của tất cả các ứng dụng mà tôi đã tạo không?

Trả lời

23

Đáng buồn là không có lệnh nào như vậy. Django không có cách nào để nói ứng dụng nào là "của bạn" so với ứng dụng của người khác.

Điều tôi đề nghị là viết một lệnh quản lý mới, gọi nó là mytest. Sau đó, tạo một cài đặt mới MY_INSTALLED_APPS. Lệnh mytest sẽ chỉ chạy thử nghiệm cho mọi ứng dụng trong MY_INSTALLED_APPS. Bạn sẽ muốn lệnh mytest để phân lớp django.core.management.base.AppCommand. django.core.management.call_command cũng sẽ hữu ích.

Vấn đề duy nhất với phương pháp này là bạn sẽ phải liên tục duy trì cài đặt MY_INSTALLED_APPS để đảm bảo nó đúng.

+11

giải pháp này có thể được thực hiện KHÔ bằng cách kết hợp MY_INSTALLED_APPS với INSTALLED_APPS trong 'settings.py'. Sau đó, nó chỉ là vấn đề quyết định nếu bạn muốn ứng dụng được chạy với 'mytest' hay không khi bạn thêm nó vào các thiết lập. –

+0

Brandon, ý tưởng hay. Cảm ơn! – Apreche

1

này hoạt động tốt hơn trong Django 1.6 +: khi bạn chạy python manage.py test, chỉ kiểm tra của bạn sẽ chạy (giả sử bạn có các thiết lập mặc định cho TEST_RUNNER)

2

Bạn có thể tạo một quản lý/lệnh /testmyapps.py đối với một trong các ứng dụng của bạn có:

from django.core.management.base import BaseCommand, CommandError 
import django.core.management.commands.test 
from django.core import management 
from django.conf import settings 

class Command(django.core.management.commands.test.Command): 
    args = '' 
    help = 'Test all of MY_INSTALLED_APPS' 

    def handle(self, *args, **options): 
     super(Command, self).handle(*(settings.MY_INSTALLED_APPS + args), **options) 
Các vấn đề liên quan