io ho la seguente struttura del progettoDjango py.test non trova il modulo impostazioni
base
__init.py
settings
__init__.py
settings.py
tests
pytest.ini
test_module.py
mio pytest.ini
assomiglia a questo:
[pytest]
#DJANGO_SETTINGS_MODULE =base.settings.settings
mio test_module.py
assomiglia a questo:
def test_django():
from base.settings import settings as base_settings
from django.conf import settings as django_settings
assert 3==5
Quando eseguo ora:
py.test
eseguirà le importazioni senza problemi e genererà un errore a assert 3==5
(come previsto). Questo mi dice che la base è sys.path
e che è possibile importare base.settings.settings
.
Ora posso cambiare test_module.py
a:
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
Quando ora corro:
py.test --ds=base.settings.settings
ottengo l'errore:
ERROR: Could not import settings 'base.settings.settings' (Is it on sys.path?): No module named base.settings.settings.
lo stesso effetto quando non ho impostato il impostazioni tramite riga di comando, ma tramite il file pytest.ini
(rimuovendo il commento dalla riga).
Sembra che mi manchi qualcosa qui ???
py.test non rimuove la directory corrente da sys.path, questo è il comportamento di python: quando si esegue uno script (py.test in questo caso) la directory dello script viene aggiunta a sys.path. Quando si esegue in modo interattivo, la directory di lavoro corrente viene aggiunta a sys.path. – flub