3

手元に奇妙な問題があります。

私は django パッケージを作成しており、いくつかのテスト ケースを提供したいと考えています。

パッケージの名前は ajax_forms で、フル パスは PYTHONPATH の一部です。このディレクトリには、tests ディレクトリ (__init__.pyファイルを含む)、tests.py ファイル (テストを含む)、および urls.py ファイルも含まれています。

今、私はテストを実行したいと思います。

ajax_forms 親ディレクトリには、INSTALLED_APPS に ajax_forms を使用したサンプル プロジェクトのセットアップがあります。

しかし、テストを実行できないようです:

 >> ./manage.py test ajax_forms
Creating test database for alias 'default'...

----------------------------------------------------------------------
Ran 0 tests in 0.000s

OK
Destroying test database for alias 'default'...

テストが見つからないので、より具体的にしようとします:

 >> ./manage.py test ajax_forms.tests
....
raise ValueError("Test label '%s' does not refer to a test" % label)
ValueError: Test label 'ajax_forms.tests' does not refer to a test
(ajax-validation)

./manage.py ajax_forms.tests.tests.AjaxFormViewTest でもテストが見つからず、上記と同じエラーが発生します。

しかし、./manage.py シェルからテスト ケースをインポートしようとすると正常に動作します

In [2]: from ajax_forms.tests.tests import AjaxFormViewTest

ここで何が起こっているのか、私はちょっと無知です。

4

3 に答える 3

6

ファイルにfrom tests import *入れる必要があります__init__.py

Django はアプリ内でテストと呼ばれるパッケージ/モジュールを探し、その名前空間にテスト ケースを問い合わせます。この場合、( init .py ファイルから) テスト パッケージの名前空間を調べて、そこには何も検出しません。ファイルでインポートを行う__init__.pyと、テスト モジュールからテスト パッケージの名前空間にテストケースがインポートされ、django はそれらを見つけて実行できるようになります。

于 2012-09-13T19:04:12.873 に答える
2

この問題に対する別の解決策は、よりインテリジェントなテスト ランナーを使用することです。試すことができます-この場合、テストが検出されますnosedjango_nose追加のアプリをインストールしたくない場合は、@Ctrlspc ソリューションがこの問題を解決する唯一の方法です。

于 2012-09-13T19:16:35.927 に答える
0

アプリ内にファイルを追加models.pyし、新しいアプリをインストール済みのアプリに追加すると、django は、.py ファイルに何も追加しなくても tests.py ファイルを見つけます__init__.py

@Ctrlspc アプローチとこれはどちらも汚いと思います。だから何を選んでもOK

于 2012-09-13T19:43:53.993 に答える