テストケースでデータベースビューを使用できません。一方、フロントエンド機能でこれらのデータベースビューを使用することができます。しかし、ビューからデータを取得しようとすると、テストケースでnullが返されます。
テストケースでデータベースビューを使用するための提案をお願いします
データベース ビューとは、基礎となるデータベース ビューを表すアンマネージド モデルを使用していることを意味しますか (ここで説明されているように)。
その場合、単体テスト中に、Djangomanaged = 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 @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0; DROP TABLE IF EXISTS myproject_myview; SET SQL_NOTES=@OLD_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...
。同じカーソルで複数のコマンドを含むファイルを実行しようとすると、問題が発生することもわかりました。
データベース ビューとは、ビュー内のデータベースにアクセスすることを意味していると思います。
そうは言っても、あなたの問題は、Django がテストしようとしているテスト データベースがないことだと思います。
これは、それとその呼び出されたフィクスチャから始める方法です。(これは SQL で行うこともできますが、フィクスチャを使用する方が簡単だと思います) 。
最も簡単なのはdumpdata
、Django が提供するコマンドを使用することです。
python manage.py dumpdata
これにより、apps ディレクトリにファイルが作成され、次のようにテストで使用できます。
例えば
myDjangoProject/myCoreApp/fixtures/myCoreApp_views_testdata.json
注: これmyCoreApp
は名前が付けられません。
また、 Django にフィクスチャを探す場所を指示するように as をFIXTURES_DIR
設定することもできます。settings.py
フィクスチャを使用するには、テストで次のことを行います
class SomeViewThatIWantToTest(TestCase): #Note, you must use django.test.TestCase
fixtures = ['core_views_testdata.json']
この後、通常どおりビュー内のデータにアクセスできるはずです。これには、正確な例に合わせて調整が必要になる場合があるため、下部に公式ドキュメントへのリンクを追加しました!
頑張ってください。間違っている場合は修正してください。:)