2016-05-12 16 views
2

Installation I tox verwenden möchten py.test an einem Projekt zu starten, das zusätzlich eine zusätzliche Einrichtung benötigt Pakete in die virtualenv zu installieren. Nach dem Erstellen des Virtualenv und dem Installieren von Abhängigkeiten müssen einige Befehle ausgeführt werden.Empfohlene Weise Befehle auszuführen, nachdem Abhängigkeiten in der virtualenv

Ich spreche speziell über einen Knoten und npm Umgebung mit nodeenv Einrichtung:

nodeenv --prebuilt -p 

Ich sehe, dass tox mir einen benutzerdefinierten Befehl, indem Abhängigkeiten für die Installation verwendet bieten können install_command in tox.ini. Aber ich glaube nicht, dass dies das ist, was ich will, denn das ersetzt den Befehl (ich nehme an pip) verwendet, um Abhängigkeiten zu installieren.

Ich dachte über eine py.test Befestigung mit Sitzung Umfang mit nodeenv Handhabung der Einrichtung, aber das scheint mir Hacky, wie ich dies nicht wollen passieren, wenn py.test direkt ausgeführt wird, nicht über tox.

Was ist der am wenigsten wahnsinnige Weg, dies zu erreichen?

Antwort

2

Sie können alle notwendigen Setup nach der Erstellung der Virtualenv und der Abhängigkeit Installation in commands tun. Ja, es heißt "die Befehle zum Testen". Aber wenn Sie zusätzliche Arbeit leisten müssen, um sich auf das Testen vorzubereiten, können Sie es einfach genau dort machen.

Es funktioniert durch, was auch immer man es in der Reihenfolge wirft es gegeben ist - zB:

[testenv:someenv] 
    deps = 
    nodeenv 
    pytest 
    flexmock 
    commands = 
    nodeenv --prebuilt -p 
    ; ... and whatever else you might need to do 
    py.test path/to/my/tests 

Wenn Sie Befehle/Skripte oder sonst was immer das das richtige Ergebnis erzeugt, aber es gibt einen Wert ungleich Null Exit-Status Sie können dies ignorieren, indem Sie - (wie in - naughty-command) voranstellen.

Wenn Sie weitere Schritte benötigen, können Sie sie in ein kleines (Python) -Skript einbinden und stattdessen dieses Skript aufrufen, wie in https://stackoverflow.com/a/47834447/2626627 beschrieben.

Es gibt auch ein Problem beim Hinzufügen der Fähigkeit, mehr als einen Installationsbefehl zu verwenden: https://github.com/tox-dev/tox/issues/715 ist implementiert.

+1

Scheint der beste Weg zu sein. Ich werde nur überprüfen müssen, ob der Befehl bereits aufgerufen wurde, und ihn bei späteren Testläufen nicht erneut aufrufen. – Feuermurmel

+0

Diese Antwort ist in Ordnung, aber es verfehlt auch das Zeichen. Ich möchte dasselbe tun - Installieren Sie den Knoten und seine Abhängigkeiten in einem Installationsschritt getrennt von dem Schritt, in dem die Tests ausgeführt werden. Diese Empfehlung wird nicht funktionieren, wenn Sie zum Beispiel "pytest --notest" ausführen - es wird die Python-Umgebung, aber nicht die Knotenumgebung installieren. Wahrscheinlich sollte tox "install_commands" anstelle von "install_command" enthalten, ähnlich wie CI-Umgebungen Installationsschritte haben, die den Testschritten vorausgehen. –

+0

Ich bemerke, dass Sie Knoten Nodeenv über Python mit 'Python -m Nodeenv - Prebuilt-P 'statt Whitelisting nodeenv aufrufen können. –

1

Ich hatte das gleiche Problem, und da es wichtig für mich war, in der Lage zu sein, die Umgebung ohne Aufruf der Tests zu erstellen (via --notest), wollte ich die Installation in der Installationsphase und nicht die Run-Phase passieren, so Ich habe etwas anders gemacht. Zuerst habe ich eine create-env Skript:

#!/usr/bin/env sh 

pip install $1 $2 
nodeenv --prebuilt --python-virtualenv --node=8.2.1 

Dann in tox.ini:

[testenv] 
install_command = ./create-env 

Dieser Ansatz den Nachteil hat, dass es nur auf Unix funktionieren würde.

In tox 715, schlage ich die Möglichkeit der nativen Unterstützung für mehrere Installationsbefehle.