2

現在の安定したdjango_nose(0.1.3)では、モデルが適切に検出およびロードされていないため、テストを実行すると次の例外が発生します。

django.db.utils.DatabaseError: (1146, "Table 'test_appdatabase.django_site' doesn't exist")

gitバージョンのdjango_noseを使用して、モデルをテストデータベースに適切に作成することができましたが、モデルはすべて空です。Djangoのテストランナーを使用すると、django_siteテーブルやauth_permissionテーブルなどの基本データがテーブルに読み込まれます。

django_site
id      domain  name
1       example.com     example.com

django_noseをインストールしてセットアップした状態でテストスイートを実行すると、次の例外が発生します。

DoesNotExist: Site matching query does not exist.

何か案は?


更新:-v 2で実行すると、アプリケーションの同期後ハンドラー(syncdb)が実行されているようです

Running post-sync handlers for application sites
Creating example.com Site object
Adding content type 'sites | site'
Adding permission 'sites | site | Can add site'
Adding permission 'sites | site | Can change site'
Adding permission 'sites | site | Can delete site'

したがって、それらを追加しているように見えますが、どこかで削除されています。


さらなる更新:

MySQLクエリログを見ると、イベントのシーケンスは次のとおりです。

  1. テストデータベースでsyncdbを実行します
  2. すべてのテーブルを切り捨てます(なぜですか?これが私の問題です)
  3. テストを実行します

クエリログからの切り捨ての例:

TRUNCATE `django_site`

テーブルが切り捨てられるのはなぜですか?テストがお互いを汚染しないようにするためですか、それを無効にする方法はありますか?


私はこれが最終的な更新であると信じています:

標準のジャンゴランナーを使用すると、同じことが起こります、

  1. テーブルが作成されます
  2. post-syncはデータを挿入します
  3. テーブルは切り捨てられます
  4. AUTO_INCREMENT=1を設定するために呼び出されたテーブルを変更します

次のステップを除いて:

  1. データが挿入されます

    INSERT INTO django_sitedomainname)VALUES('example.com'、'example.com')

なぜこれがここで起こっているのかわからないが、django_noseでは起こっていない

4

2 に答える 2

1
  1. sitesアプリはあなたの中にありますINSTALLED_APPSか? ノーズ テスト ランナーは、django のテスト ランナーを拡張します。このテスト ランナーはsyncdb、インストールされているすべてのアプリを呼び出して取得する必要があります。
  2. あなたのテストケースはどのように見えますか? django-noseフィクスチャをロードする責任はありません (通常の Django テスト ランナーでもありません)。フィクスチャは によってロードされdjango.test.TestCaseます。

編集:あなたが説明しているすべてのことは_fixture_setup()、Django の TestCase から発生します。切り捨てなどが発生しflush、フィクスチャがセットアップされます。

https://github.com/django/django/blob/master/django/test/testcases.py#L258

于 2011-08-03T16:20:59.513 に答える
0

https://github.com/jbalogh/django-nose/issues/39に表示される差分は、この問題を修正しています。

于 2011-08-04T22:24:47.100 に答える