0

テストケースでデータベースビューを使用できません。一方、フロントエンド機能でこれらのデータベースビューを使用することができます。しかし、ビューからデータを取得しようとすると、テストケースでnullが返されます。

テストケースでデータベースビューを使用するための提案をお願いします

4

2 に答える 2

2

データベース ビューとは、基礎となるデータベース ビューを表すアンマネージド モデルを使用していることを意味しますか (ここで説明されているように)。

その場合、単体テスト中に、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()

ノート:

  1. これは MySQL の問題を回避するためのものであるため、お客様のケースには当てはまらない場合があります。テーブルは、最初の実行時にのみ存在しsetUpます。後続のパスでテーブルを削除しようとすると、MySQL は警告を生成します - このコードは警告を抑制します。

  2. このファイルには、単一ビューの作成コードが 形式で含まれていますCREATE OR REPLACE VIEW myproject_myview AS...。同じカーソルで複数のコマンドを含むファイルを実行しようとすると、問題が発生することもわかりました。

于 2013-02-11T20:08:59.287 に答える
0

データベース ビューとは、ビュー内のデータベースにアクセスすることを意味していると思います。

そうは言っても、あなたの問題は、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']

この後、通常どおりビュー内のデータにアクセスできるはずです。これには、正確な例に合わせて調整が必要になる場合があるため、下部に公式ドキュメントへのリンクを追加しました!

頑張ってください。間違っている場合は修正してください。:)

詳細はこちら

于 2013-02-11T08:03:52.337 に答える