問題タブ [django-testing]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
5050 参照

django - 南移行を使用するDjangoアプリのテスト

南の移行を使用するDjangoアプリの機能テストを作成しようとしています。
最終的には、ツイルテストも作成します。

既存のテストを実行しようとすると、Southの移行に問題があるため、テストデータベースが正常に作成されません。(58回の移行のうち7回目に失敗)

テストの目的では、syncdbのように、SouthからよりもDjangoモデルからテストデータベースを構築する方が良いように思われます。

現在のモデルからテストデータベースを構築するのではなく、Southを使用するようにDjangoテストスイートを設定するにはどうすればよいですか?

0 投票する
2 に答える
58 参照

django - テストケースの各メソッド間で何かを自動的に実行する方法はありますか?

Django に付属の TestClient を使用していくつかの単体テストを実行しているため、各テスト メソッドで同じデータベースを簡単に使用できます。ただし、一部のテストでは、各テスト メソッド間でリセットしたい外部 Web サービスに接続します。

URLを呼び出すだけでこのリセットを行うことができますが、テストランナーが各テストメソッド間でこれを自動的に行うようにしたいと考えています。

すべてのテストメソッドでリセット関数を最初に呼び出す必要なく、これを行う簡単な方法はありますか?

0 投票する
1 に答える
289 参照

python - Django で特定のモデルをテストする

テスト目的のためだけにモデルのセットを用意することはできますか? アイデアは、いくつかのヘルパー抽象モデル HelperBase を含むアプリを作成したということです。ここで、DerivedTest1、DerivedTest2 など、それをテストするために継承するいくつかのモデルを提供したいと思います。しかし、最終的にこれらのテスト モデルが実稼働データベースに表示されることはあまり望ましくありません。テストデータベースでテーブルを構築したいだけです。それは可能ですか?ファイルでモデルを作成しようとしましたtests.pyが、うまくいかないようです。

0 投票する
3 に答える
3141 参照

django - Django:テスト用にメディアルートを変更する

ファイルのアップロードを含む、Djangoアプリケーションのテストを作成しようとしています。MEDIA_ROOTそのために、一時的に「myproject / Fixtures /test_media/」に変更したいと思います。何らかの理由で、これによりDjangoがフィクスチャを見つけることができなくなっているようです。

私のテストケースは次のようになります

何らかの理由で、Djangoはフィクスチャをロードできないため、すべてのテストが失敗します。

フィクスチャ'fixtures/ test_data.json'のインストールの問題:トレースバック(最後の最後の呼び出し)..。

私は何が間違っているのですか?

0 投票する
1 に答える
1918 参照

python - 単体テスト間でdjangoオブジェクトIDが増加する

私は、PostgreSQL 8.4.7-0squeeze2 を使用した Debian スクイーズで Django 1.2.3-3+squeeze1 を使用しています (ただし、PostgreSQL はここでは関係ないと思います)。

アイデアは、単体テストを実行する間にデータベースからすべてを削除することです。unittest のドキュメントによると、それtearDownが目的です。私が抱えている問題は、さまざまな単体テスト間で保存された状態がまだあるように見えることです。具体的には、ID が増加していることがわかります。で1 つのZipFileUploadオブジェクトを作成し、次に で 1 つのオブジェクトをtest1作成すると、両方のIDがであると予想されますが、私が見ているのはZipFileUploadtest211test12test2. これは、ID がこれらのテーブルの外にあるインデックスから取得された場合に意味があります。それが実際に当てはまるかどうかを知るために、Diangoがこれをどのように行っているかについて、私は十分に知りません. 彼らがこのようにしているとしたら、私にはその理由がわかりません。この点に関する説明をいただければ幸いです。

とにかく、誰かが提案できるなら、データベースを削除するクリーンな方法で解決します。このメソッドはおそらく に入るはずteadDownです。Django アプリケーションのテストでは、次の機能について言及されていますが、からのインポートに失敗しましたdjango.test.utils。紛らわしいことに、この関数はdjango/db/backends/creation.py.

destroy_test_db(old_database_name, verbosity=1)

名前が DATABASES の NAME に格納されているデータベースを破棄し、提供された名前を使用するように NAME を設定します。

この文の最初の部分は「名前が DATABASES の NAME に格納されているデータベースを破棄する」ですが、「提供された名前を使用するように NAME を設定する」とはどういう意味ですか? 提供された名前はold_database_name

NAME文脈に何があるかは明らかではありません。NAMEもしそうなら、なぜDATABASESすでに設定されているものを設定する必要があるのですか? 提供された名前はold_database_nameだと思いますが、もしそうなら、なぜそれを という引数に設定したいのでしょうold_database_nameか? この文は、開発ドキュメントでは変更されていません。

編集:

Steve Mayne からの返信 (以下を参照) の後、この背景について少し詳しく説明したいと思います。

このアプリケーションは、単体テストを含め、2007/2008/2009 年に作成されました。その間、私は Django の 1.0 より前のリリースを使用していました。Ken Cochran の Django Release Historyによると、1.0 は 2008 年 9 月 3 日にリリースされました。説明されているセットアップは、その間は正常に機能していました。上記の TeaDown 関数は、もともと 2007 年 12 月に書かれたものであることがわかりました。では、Django の動作が変わったのでしょうか?

tearDown後から考えると、上記のようにテーブルを空にしても、id カウントが にリセットされることは保証されないことに気付きました1。これは、シーケンスがテーブルとは別のオブジェクトになる可能性があるためです。

スティーブの解決策に感謝します。存在する場合は、シーケンスのリセットに対する移植可能な解決策について聞きたいです。destroy_test_db上記の機能を機能させる方法の説明にも興味があります。

0 投票する
3 に答える
9828 参照

django - 既存のデータベースを使用する Django テスト

テスト データベースのセットアップ動作をカスタマイズするのに苦労しています。私は次のことを達成したいと思います:

  • テスト スイートは既存のデータベースを使用する必要があります
  • テスト スイートはデータベースを消去または再作成するのではなく、mysql ダンプからデータをロードする必要があります。
  • データベースはダンプから生成されるため、フィクスチャをロードする必要はありません
  • テストの終了時に、データベースは破棄されるべきではありません

testsuiterunner が作成をバイパスするのに苦労しています。

0 投票する
3 に答える
5325 参照

python - Djangoプロジェクトのコンテキストで任意のスクリプトを実行するにはどうすればよいですか?

シェルを使用しているかのように、Djangoプロジェクトのコンテキストでファイルを実行したい場合がありますが、テキストエディターを使用すると便利です。これは主に、何かを試してみるか、ビュー、テスト、定期的なタスク、または管理コマンドに入れる前に、いくつかの機能のプロトタイプをすばやく作成することです。

これらの行を.pyファイルの先頭に貼り付けることができ、Djangoコンテキストで実行されることはわかっています。

引数を取る管理コマンド、実行するPythonモジュールを作成し、Django環境で実行する方が簡単だと思いました。これが私が書いた「runmodule」コマンドです:

これは機能しているように見えます-モジュールにコードを貼り付けて、このコマンドの引数として渡すことができます。たとえば、実行されます。

myapp/trysomethingout.pyを実行します。これはこれを行うための最良の方法ですか?

0 投票する
4 に答える
16817 参照

django - sqlite で django テストを実行する

私は運用と開発に Postgres を使用していますが、いくつかのテストを実行するために sqlite を使用したいと考えています。1 つのエンジンをテスト用に構成し、別のエンジンを開発/運用用に構成する簡単な方法がわかりません。何か不足していますか?

0 投票する
1 に答える
1275 参照

django - Djangoでのセッションを必要とするミドルウェアを適切にテストするにはどうすればよいですか?

djangoでミドルウェアをテストする方法を見つけようとしています。私が書いているミドルウェアは、特定の条件下でユーザーにログを記録します(電子メールで送信されたキーが有効な場合)。だから明らかに私はとに依存しdjango.contrib.authていdjango.contrib.sessionsます。

ログイン部分のテストで問題が発生しています。私はこのようなリクエストをしています:

セッションが設定されていないため、失敗します。次に、テストクラスに小さなスニペットを書きました。

が原因で失敗し'User' object has no attribute 'backend'ます。その意味はわかりませんが、インストールしたミドルウェアをすべて実行する必要があるのではないかと思います。

ミドルウェアを実行するためだけにこれを偽のビューにしたくはありませんが、現時点では別のオプションを見つけることができません。

だから私はただ知りたかったのですが、このウサギを穴の奥まで追いかける前に、ダクトテープをそれほど必要としない方法はありますか?

0 投票する
2 に答える
7301 参照

django - django テスト中にフィクスチャをロードするときの IntegrityError

dumpdata で作成されたフィクスチャをロードしていますが、次の例外が発生します。

これは sqlite3 バックエンドを使用しています。

更新: ここでは自然キーを使用しても違いはありません。

それは何を意味し、なぜそれが起こっているのですか?