2012-03-02 61 views
14

我們在我們的Django站點中有一堆命令,一些是管理的,一些是在cron作業上運行的,我無法弄清楚如何測試。他們幾乎是這樣的:從UnitTest/WebTest運行Python/Django管理命令

# Saved in file /app/management/commands/some_command.py 
# Usage: python manage.py some_command 
from django.core.management.base import NoArgsCommand 
class Command(NoArgsCommand): 
    def handle_noargs(self, **options): 
     # Do something useful 

而且我有一些測試,這是這樣的:

import unittest 
from django.test import TestCase 
from django_webtest import WebTest 

class SomeTest(WebTest): 
    fixtures = ['testdata.json'] 

    def setUp(self): 
     self.open_in_browser = False 
     # Set up some objects 

    def test_registration(self): 
     response = self.client.get('/register/') 
     self.assertEqual(response.status_code, 200) 
     form = self.app.get('/register/').forms[1] 
     # Set up the form 
     response = form.submit() 
     self.assertContains(response, 'You are Registered.') 
     if self.open_in_browser: 
      response.showbrowser() 

     # Here I'd like to run some_command to see the how it affects my new user. 

在我的測試(在那裏我有評論)我想運行我NoArgsCommand看看我的新用戶會發生什麼。我找不到有關如何完成此操作的任何文檔或示例。另外請注意,我的測試環境是我從頭開始在內存中創建的SQLlite數據庫,加載一些固件和對象並運行測試,所以儘可能多地將數據設置爲真實的數據庫,然後運行我的命令行中的命令我不行,這太費時。任何想法將不勝感激。

回答

42

Django documentation on management commands可能有幫助,它描述瞭如何從python代碼調用它們。

基本上你需要這樣的事:

from django.core import management 
management.call_command(...) 
+0

RTFM,衛生署!謝謝,我不知道這個問題甚至存在。 – scoopseven 2012-03-02 19:54:08

+0

適合所有人,特別是在星期五:)當然,不客氣! – kgr 2012-03-02 19:57:40

+0

謝謝!我一直試圖從Visual Studio運行我的單元測試,直到我遵循您的參考鏈接才能得到它。 – TurboGus 2013-01-18 06:16:15