2014-04-20 15 views
6

La prima caratteristica elencata su tox website è "controllare correttamente l'installazione del pacchetto con diverse versioni e interpreti Python". Questo mi fa pensare che se rovino il mio setup.py, che i test non passeranno, e sarò avvisato del fatto che il mio setup.py è andato male.test in tossicodipendenza non utilizzano necessariamente il codice installato

Questo non è il caso. Quello che succede di fatto è che il codice viene importato dalla directory locale (aka {toxinidir}) se si segue il solito schema di mettere il proprio modulo o pacchetto nella stessa directory del tox.ini. Ciò significa che puoi fare in modo che il tuo setup.py non assoluti assolutamente nulla e tox ti dirà se è a posto. A quel punto, è abbastanza facile non notare il problema fino a dopo aver spinto a pypi e provare a usare la cosa. Questo è il tipo di problema che mi piacerebbe evitare.

Il problema principale è che la stringa vuota viene visualizzata su sys.path durante il test. Python interpreta questo per indicare l'attuale directory di lavoro e le importazioni da lì.

C'è un modo per configurare tox in modo tale che la directory locale non venga utilizzata durante i test?

Attualmente la mia soluzione alternativa è cd {envtmpdir} && coverage run && mv .coverage {toxinidir}, ma si tratta ovviamente di un brutto attacco.

Qui mi forniscono due versioni del nostro codice:

Il mio obiettivo è quello di trovare una configurazione tox che evita il problema di cui sopra, ed è abbastanza ragionevole raccomandare per l'uso in tutti i progetti.

risposta

1

Ho notato che nosetests modifica sys.path durante la sua esecuzione: Aggiunge il codice estratto ad esso all'inizio. Questo essenzialmente rompe il tossicodipendente che sta cercando di creare. Per risolvere questo problema, devi solo aggiungere il -P bandiera per nosetests:

[tox] 
envlist = py27 

[testenv] 
commands= 
    nosetests -P tests 
deps= 
    nose 
    -rrequirements.txt 

Inoltre, ho dovuto accodare tests (naso che punta alla directory tests/) per evitare che il naso da import ing qualsiasi del codice non-test (Sto usando estensioni C che possono o non possono essere compilate nel checkout).

Problemi correlati