2010-08-26 39 views
6

我正在測試我的應用程序,我遇到了一個問題,我不知道爲什麼。我正在爲我的測試加載燈具,燈具有互相依賴的外鍵。它們必須以特定順序加載,否則它將無法工作。Do Django Fixtures在測試時加載順序不正確?

我裝的燈具是:

["test_company_data", "test_rate_index", 'test_rate_description']

公司數據是第一位的。 test_rate_index對公司有一個外鍵,並且test_rate_description對在test_rate_index中聲明的模型有一個外鍵。 (順便說一下,不同的測試需要不同的燈具,這就是爲什麼我不只是將所有東西都放在一箇中)

如果我使用django的加載測試的標準過程,測試不會按正確的順序加載。

 
class TestPackages(test.TestCase): 
    fixtures = ["test_company_data", "test_rate_index", "test_rate_description",] 

我得到的消息

DoesNotExist: RateDescription matching query does not exist.

但是,如果我扭轉我的燈具的順序(這是沒有意義的),它的工作原理:

fixtures = ["test_rate_description", "test_company_data", "test_rate_index",]

Django's documentation規定,燈具的順序加載他們被宣佈,但似乎並非如此。

作爲一種解決辦法,而不是使用Django的

 call_command('loaddata', *fixtures, **{ 
              'verbosity': 0, 
              'commit': False, 
              'database': 'default' 
             })

我使用的加載夾具一次一個設置方法不同的功能。

def load_fixtures(fixtures): 
    for fixture in fixtures: 
     call_command('loaddata', fixture, **{ 
              'verbosity': 0, 
              'commit': False, 
              'database': 'default' 
              })

有沒有什麼我不正確地做或不理解,導致我的燈具沒有按正確的順序加載時嘗試使用標準方法?

+0

你可以發佈你的燈具模型是什麼樣子嗎? – 2010-08-26 16:22:02

回答

1

Django的文檔聲明fixtures按照它們聲明的順序加載,但似乎並非如此。

這當然很奇怪。當我測試了我的一個項目(Django 1.2.1,Python 2.6.2,Postgresql 8.3.11)時,燈具按照正確的順序加載。

這是我要做的事情,以排除故障。

DoesNotExist:RateDescription匹配查詢不存在。

  1. 加載夾具或執行測試時,當你收到此錯誤?你能找到提高這個的夾具/代碼嗎?如果需要增加詳細程度。

  2. 你可以嘗試從命令行發射loaddata命令嗎?調用它三次,以適當的預期順序爲每個呼叫傳遞一個燈具的名稱。看看裝置是否加載。

  3. 我知道你可能已經這樣做了,但是你能否確保第一個和第二個燈具不包含任何RateDescription數據?

+2

您好Manoj,感謝您的調試建議。 當我在命令行中運行,我發現燈具進行轟炸,因爲「CREATION_TIME」不能爲空」。 加入CREATION_TIME給他們似乎跑,因爲我所期望的燈具後。 然而,對我來說,仍然沒有任何意義,爲什麼他們會按照一個順序安裝,看起來好像沒問題,我的所有測試都通過了,測試依賴於那些數據。 – Aaron 2010-08-26 17:38:01

相關問題