2013-02-04 20 views
0

我無法在測試用例中使用數據庫視圖。另一方面我能夠在前端功能中使用那些數據庫視圖。但是當我嘗試從視圖中獲取數據時,它在測試用例中返回null。如何在測試用例中使用數據庫視圖

請給我使用的數據庫視圖建議在測試用例

+0

你做了一個合適的夾具? –

+0

@limelights請給我任何例子,我們如何做出適當的夾具。 –

回答

0

我被你的意思是訪問視圖中的數據庫的數據庫視圖猜測。

這就是說,我認爲你的問題是,你沒有一個測試數據庫,Django試圖對照。

這就是你如何開始與它的所謂的燈具。 (你也可以用SQL來做到這一點,但是I認爲用夾具更容易)。

最容易使用由Django提供的dumpdata命令。

python manage.py dumpdata

這將創建一個文件,它會在你的應用程序目錄中,您可以在測試中使用這樣的:

例如

myDjangoProject/myCoreApp/fixtures/myCoreApp_views_testdata.json

注意: myCoreApp將不會被命名。

您還可以在您的settings.py中設置FIXTURES_DIR設置,以便告訴Django將來在哪裏查找燈具。

要使用固定裝置,然後在你的測試你以下

class SomeViewThatIWantToTest(TestCase): #Note, you must use django.test.TestCase 
    fixtures = ['core_views_testdata.json'] 

在這之後,你應該能夠訪問你的數據在你的意見是正常的。 這可能需要一些調整以適應您的確切示例,所以我在底部添加了官方文檔的鏈接!

祝你好運,請糾正我,如果我錯了! :)

Read more about this here

1

通過數據庫視圖你的意思是你所使用的代表底層數據庫視圖(如描述here)的非託管模式?

如果是這樣,我發現,在單元測試期間,Django忽略模型meta中的managed = False設置並創建一個實際的表。除非您在您的setUp中明確填充此項,否則這將爲空。

解決此獲得的快速和骯髒的方法是顯式刪除該表,並在你的測試用例的setUp方法創建視圖,就像這樣:

# Imports 
from django.db import connection 
from django.core.files import File 

... 

     # Inside your test case setUp method 
     # Drop the table 
     cursor = connection.cursor() 
     # See note 1 
     cursor.execute("SET @[email protected]@SQL_NOTES, SQL_NOTES=0; DROP TABLE IF EXISTS myproject_myview; SET [email protected]_SQL_NOTES;") 
     cursor.close() 

     # Create the view 
     # See note 2 
     file_handle=open('/full/path/to/myproject/sql/create_myview.sql','r+') 
     sql_file=File(file_handle) 
     sql = sql_file.read() 
     cursor = connection.cursor() 
     cursor.execute(sql) 
     cursor.close() 

注:

  1. 這是爲了解決MySQL問題,因此可能不適用於您的案例。該表僅在第一次運行setUp時存在。如果您嘗試在後續傳遞中刪除表,MySQL將生成警告 - 此代碼會抑制它們。

  2. 此文件包含CREATE OR REPLACE VIEW myproject_myview AS...格式的單個視圖的創建代碼。我發現試圖用相同的遊標執行包含多個命令的文件也會導致問題。

相關問題