問題タブ [django-nose]
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.
python - Django ORM - 値 ().filter() チェーンのモック
Djangosmodel.Manager()
クラスの連鎖呼び出しをモックしようとしています。values()
今のところ、 andfilter()
メソッドをモックしたいと思います。
小さなテスト プロジェクトを作成したことをテストするには、次のようにします。
- 仮想環境を作成する
- 走る
pip install django mock mock-django nose django-nose
- プロジェクトを作成する
django-admin.py startproject mocktest
- アプリを作成する
manage.py startapp mockme
django_nose
と(settings.py)mocktest.mockme
に追加INSTALLED_APPS
TEST_RUNNER = 'django_nose.NoseTestSuiteRunner'
settings.pyに追加
すべてが正しくセットアップされていることを確認するために、実行しましたmanage.py test
。1 つのテストが実行されます。これは、アプリを作成するときに Django が作成する標準テストです。
次にやったのは、非常に単純なモデルを作成することでした。
mockme/models.py
次に行ったのは、 を使用する単純な関数を作成することでしたMyModel
。それは後でテストしたい機能です。
mockme/functions.py
ここでは特別なことは何も起きていません。この関数は MyModel オブジェクトをフィルタリングして、name='Frank'
. values() への呼び出しValuesQuerySet
は、見つかったすべての MyModel インスタンスの name フィールドのみを含む を返します。
mockme/tests.py
最初の assertEquals は成功と評価されます。モデル Manager はまだモックされていないため、インスタンスは返されません。2 番目の assertEquals が呼び出されるとresult
、QuerySetMock への戻り値として追加した MyModel インスタンスが含まれることが期待されます。
よくわかりませんが、メソッドが最後に評価された呼び出しになることがわかったのでfilter()
、メソッドではなくメソッドをモックしました。values()
2 番目の結果変数には MyModel インスタンスが含まれないため、テストは失敗します。
メソッドが本当にモックされていることを確認するためにfilter()
、「debug print」ステートメントを追加しました。
返された:
私は何を間違っていますか?
python - テストがゼロの場合でもdjango-noseは15秒かかります
私はdjango-noseを使用してREUSE_DB=1
おり、セットアップにかかる時間を確認するためだけにすべてのテストを無効にしました。
プロセス全体にかかった実際の時間は、平均 15 秒でした。
私の明らかな推測は mysql データベースだったので、ログを調べたところ、nose がいくつかのALTER TABLE
クエリを実行していることがわかりました。私のログ:
ログを調べると、毎回データベースを作成していなくても、時間がかかりすぎているようです。これは完全に正常ですか?
私のセットアップ:mysql 5.5、django 1.3.1を搭載したOSXライオン。
django - ノーズ、ジャンゴノーズ、セレンを使用したDjangoテストのフリーズ
私は自分のdjangoプロジェクトをテストしようとしています、私は次のような非常に古典的なレイアウトのアプリを持っています:
manage.pyの親ディレクトリにmanage.pyがあります(django 1.4の新しいレイアウトによる)。
tests / __ init __。pyで私はそのようなものを持っています:
tests / models.pyには古典的なpythonテスト(これは問題なく動作します)があり、tests/views.pyにはセレンテストがあります。
今私がするとき:
セレンテストは問題なく機能します(今のところ失敗しますが、私はそれに取り組んでいます)。しかし、私がするとき:
一部の定期的なテストは正しく起動されますが、ある時点で、Firefoxが起動され、すべてがフリーズします。これ以上のテストは起動されず、Firefoxでもターミナルでも何も起こりません。
通常のテストはunittest.TestCase(django.test.TestCaseではない)から派生し、Seleniumテストはdjango.test.LiveServerTestCaseから派生し、django 1.4.0、nose 1.2.1、djangoを使用していることを追加します。 -ノーズ1.1およびセレン2.26.0。
どんな手掛かり ?
django - Djangoの鼻のテストに--exeが必要なのはなぜですか?
django-noseテストを実行しているときに--exe引数を使用する必要があるのはなぜですか。使用しない場合は、実行するテストをスキップします
例えば
私のテストが正しい場所にある間など。
冗長性3で実行すると、次のように表示されます。
それは示しています:(パス名を変更しましたが、とにかく、noseはそれらを見つけますがスキップします!!)
テストを実行する唯一の方法は、-exe引数を使用することです
使ってます:
- Ubuntu(10.4と11.4の両方は関係ありません)
- Python2.6および2.7
- Django 1.4.3
何故ですか?
ドキュメントによると、--exeは必要ありません
しかし、しばらく困惑して...そしてグーグルしてここを見た後、私はこの提案を得ました。
NoseがDjangoテストを見つけられないを参照してください
しかし、バグと思われるものに対するこの回避策の説明はどこにもありませんか?
または私は何かが欠けていますか?
他の質問はかなり古く、この問題に対する満足のいく答えが見つからなかったので、私はこれを要求します.....
python - django-noseテスト関数で行われたデータベースの変更をクリーンアップするにはどうすればよいですか?
さまざまな理由から、鼻機能テストを使用してテストスイートを作成します。
Djangoアプリケーションのテストスイートを実行するときは、(のように)これらのテストからデータがリークするのを避けたいと思います。これはdjango.test.TestCase
、結合につながり、障害の診断が困難になるためです。
これを解決する最も明白な手段は、クリーンアップしたいテストをラップアラウンドできるデコレータですが、別のソリューションで必要なものが得られる場合、私はそれと結婚していません。
PostgreSQLで実行しているため、Postgres固有のソリューションで十分です。
django - django-nose と django-celery の併用 -- 単体テスト
django-noseを使用した django プロジェクトがあります。プロジェクトにdjango-celeryを追加したいと思います。単体テストを使用します。django-nose と django-celery の両方で、settings.py ファイルに TEST_RUNNER 設定が必要です。具体的には:
django-nose および:
ジャンゴセロリ用。
両方のパッケージを使用できるようにするには、これをどのように処理すればよいですか?
django - Django (nose) テストのスピードアップと reuse_db が機能しない
django-nose を使用して、django (1.4) で単体テストを実行しています。
データベースの作成には時間がかかります。
それで、これをsettings.pyに入れることがわかりました:
トリックを行う必要があります。
実際に django itsellve はこの提案をします:
もちろん、このフラグ =0 を使用して一度 (またはデータベースの変更ごとに) 実行する必要があります
ただし、フラグを 0 に設定すると、私のテストは次のコメントで終了します。
したがって、再利用して実行したい場合....再利用するものは何もありません...そして、テーブルが存在しないというエラーが表示されます
reuse_db を 0 に設定すると、テストは完全に実行されます
開発設定で test データベース エイリアスを使用しています。
これはdjango-noseではうまく機能しないとどこかで読んだので、テストにインメモリsqlliteデータベースを使用していません。
では、最終的にデータベースを破壊しているときに、どうすればDBを再利用できますか...
これによるとhttps://docs.djangoproject.com/en/1.4/topics/testing/#the-test-database django はこれを行っていますが、これを防ぐ方法 (できれば)、またはその方法を示していません。 reuse_db オプションを使用します。他の設定を使用する必要がありますか?
django - 複数のデータベースを処理するように django-nose に指示する方法はありますか?
(クロスポスト: https://github.com/jbalogh/django-nose/issues/129 )
settings.py には、次の 2 つのデータベースがリストされています。
REUSE_DB なしでテストを実行すると、動作は遅くなります (データベースの作成/破棄だけで 2 分近くかかります)。
しかし、これは失敗します:
tblMfg は OST_DEV_1 ではなく UMC データベースにあるため、これは理にかなっています。django-nose に tblMfg の場所を伝える方法はありますか? 私のテスト自体は tblMfg を参照していないことに注意してください -- 今のところ 1+1 == 2 にこだわっています。
現在、UMC にあるテーブルに対して手動で「using」を使用しています。