2016-05-12 90 views
2

安裝依賴後運行命令,我想用TOX到其需要除了安裝包到virtualenv中額外的設置項目運行py.test。在創建virtualenv並安裝依賴關係之後,需要運行一些命令。推薦方式中的virtualenv

具體我在談論建立節點NPM使用nodeenv環境:

nodeenv --prebuilt -p 

我看到TOX讓我通過設置install_command提供用於安裝依賴的自定義命令tox.ini。但我不認爲這是我想要的,因爲取代了命令(我認爲pip)用於安裝依賴關係。

我想過使用py.test夾具會話範圍來處理設置nodeenv,但這似乎對我來說很不好,因爲我不希望這發生在py.test直接運行而不是通過tox。

實現此目標的最簡單的方法是什麼?

回答

2

在創建virtualenv和依賴項安裝commands後,您可以執行所有必要的設置。是的,它說「要調用測試的命令」。但是如果你需要做額外的工作來準備測試,你可以在那裏做。

它可以通過任何你在它被賦予的順序在它扔 - 如:

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

如果您有任何其他產生正確的結果命令/腳本,或但它返回一個非零退出狀態您可以通過預先-(如- naughty-command)來忽略。

如果您需要更多步驟發生,您可以將它們包裝在一個小的(Python)腳本中,並按照https://stackoverflow.com/a/47834447/2626627中所述的方式調用該腳本。

添加使用多個安裝命令的功能還有一個問題:實現了https://github.com/tox-dev/tox/issues/715

+1

似乎是最好的方式。我將只需檢查命令是否已被調用,而不是在以後的測試運行中再次調用它。 – Feuermurmel

+0

這個答案沒問題,但它也沒有打上標記。我希望做同樣的事情 - 在安裝步驟中安裝節點及其依賴項,與測試運行的步驟分開。例如,當運行'pytest --notest'時,這個建議將不起作用 - 它將安裝Python環境,但不安裝節點環境。很可能,tox應提供'install_commands'而不是簡單的'install_command',這與CI環境在測試步驟之前安裝步驟的方式大致相同。 –

+0

我注意到,而不是白名單nodeenv,你可以調用nodeenv通過python'python -m nodeenv --prebuilt -p'。 –

1

我有同樣的問題,因爲能夠創建環境而無需調用測試(通過--notest)對於我來說很重要,我希望安裝在安裝階段發生,而不是在運行階段發生,所以我做了些微不同的事情。在tox.ini

#!/usr/bin/env sh 

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

然後:首先,我創建了一個create-env腳本

[testenv] 
install_command = ./create-env 

這種方法的缺點是它只能在Unix上運行。

tox 715中,我提出了對多個安裝命令的本機支持的可能性。