19

私は次のプロジェクト構造を持っています

base
    __init.py
    settings
        __init__.py
        settings.py
    tests
        pytest.ini
        test_module.py

pytest.iniはこのように見えます:

[pytest]
#DJANGO_SETTINGS_MODULE =base.settings.settings

test_module.pyはこのように見えます:

def test_django():
    from base.settings import settings as base_settings
    from django.conf import settings as django_settings
    assert 3==5

私が今走っているとき:

py.test

問題なくインポートを実行し、assert 3==5(予想どおり)でエラーを発生させます。これは、ベースがオンになっていてsys.pathbase.settings.settingsインポートできることを示しています。

今私はに変更test_module.pyします:

def test_django():
    from base.settings import settings as base_settings
    from django.conf import settings as django_settings
    print django_settings.xxx
    assert 3==5

私が今走っているとき:

py.test --ds=base.settings.settings

エラーが発生します:

エラー:設定をインポートできませんでした'base.settings.settings'(sys.pathにありますか?):base.settings.settingsという名前のモジュールがありません。

pytest.iniコマンドラインではなくファイルを介して(行のコメントを解除して)設定を設定した場合も同じ効果があります。

ここで何かが恋しいようです???

4

5 に答える 5

23

django.conf.settingsは遅延しているため、設定モジュールにアクセスしようとした場合にのみ、設定モジュールのインポートを試みます。そのため、設定オブジェクトをインポートするだけでテストが失敗することはありません。

あなたの問題はすでにここで議論されています:https ://github.com/pelme/pytest_django/issues/23

これはpytestの問題であり、pytest-django自体の問題ではありません。何らかの理由でPytestは、sys.pathから現在のディレクトリを削除します。回避するのは簡単なはずです。

解決策1:

PYTHONPATH=`pwd` py.test

解決策2:解決策2:

これをconftest.pyに追加します(conftest.pyはアプリと同じディレクトリにあると仮定しました):

import os
import sys

sys.path.append(os.path.dirname(__file__))

解決策3(virtualenvラッパーを使用している場合):

新しいプロジェクトを開始するときは、プロジェクトのディレクトリで次の行を実行して、プロジェクトのルートディレクトリをvirtualenvのPYTHONPATHに追加するだけです。

add2virtualenv .
于 2013-03-07T20:21:04.280 に答える
1

ドキュメントから、それbaseはすでにあなたの道にあるようです-それで多分あなたは使用したいと思うでしょう

py.test --ds=settings.settings
于 2013-03-04T11:30:32.690 に答える
1

設定に3つの「t」があるのはなぜですか?設定ではなく設定にする必要があります

于 2013-03-04T11:34:05.460 に答える
0

--ds=base.settings.settings最初のプログラムではなく、引数なしで2番目のプログラムを実行します。これは、エラーの原因であると思われる場所です。

また、同じ名前のコードをインポートするとき、settings私は次のようなことをしたくなるでしょう:

from base.settings import settings as foo
from django.conf import settings as bar
于 2013-03-04T11:34:28.033 に答える
0

私も同じ問題を抱えていました。pytest -s <project_dir>私にとってはうまくいきます。

于 2017-12-15T08:05:00.900 に答える