我無法在測試用例中使用數據庫視圖。另一方面我能夠在前端功能中使用那些數據庫視圖。但是當我嘗試從視圖中獲取數據時,它在測試用例中返回null。如何在測試用例中使用數據庫視圖
請給我使用的數據庫視圖建議在測試用例
我無法在測試用例中使用數據庫視圖。另一方面我能夠在前端功能中使用那些數據庫視圖。但是當我嘗試從視圖中獲取數據時,它在測試用例中返回null。如何在測試用例中使用數據庫視圖
請給我使用的數據庫視圖建議在測試用例
我被你的意思是訪問視圖中的數據庫的數據庫視圖猜測。
這就是說,我認爲你的問題是,你沒有一個測試數據庫,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']
在這之後,你應該能夠訪問你的數據在你的意見是正常的。 這可能需要一些調整以適應您的確切示例,所以我在底部添加了官方文檔的鏈接!
祝你好運,請糾正我,如果我錯了! :)
通過數據庫視圖你的意思是你所使用的代表底層數據庫視圖(如描述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()
注:
這是爲了解決MySQL問題,因此可能不適用於您的案例。該表僅在第一次運行setUp
時存在。如果您嘗試在後續傳遞中刪除表,MySQL將生成警告 - 此代碼會抑制它們。
此文件包含CREATE OR REPLACE VIEW myproject_myview AS...
格式的單個視圖的創建代碼。我發現試圖用相同的遊標執行包含多個命令的文件也會導致問題。
你做了一個合適的夾具? –
@limelights請給我任何例子,我們如何做出適當的夾具。 –