toxからbatsを使ってPythonのバージョンを変えながらシェルスクリプトでテストする際のエラー
こんにちは. この前リリースしたPythonで使えるツールのshape_commentatorの評判が良く,最近はCIでPyPIにパッケージをアップロドする設定を書いたりしてCIとわいわい遊んでいます.
tox と bats
テストには,doctestに加えてbats を利用しています.これは,シェルスクリプト でテストを書けるツールで,今回のようなファイルを直接出力するなどPythonのコードよりもシェルスクリプトでテストを書きたいようなもののテストに適していると思い,導入しました.
shape_commentatorは,過去の数値計算のコードを読み解くツールとして有用になる可能性があるため,様々なPythonのバージョンでテストしておきたいという気持ちがあります.Pythonの様々なバージョンでのテストと言えばtoxですが,これはvirtualenvを使って様々なバージョンのPythonに対してテストを行うツールです.
tox.iniの書き方
tox.iniからbatsを呼ぶために,このようにtox.ini
を書きました.
[tox] envlist = py36 [testenv] deps = numpy whitelist_externals = bats commands = bats --tap tests/test_all.bats
気をつける点
注意点は以下の2点です.
1. toxからbatsのような外部コマンドを呼ぶには,whitelist_externals
に書く必要があります.
2. batsを直接ターミナルから呼び出さない場合にあたるので,--tap
オプションを付けます.
1をやらないと,
WARNING: test command found but not installed in testenv cmd: /usr/local/bin/bats env: /Users/xxxxxx/shape_commentator/.tox/py36 Maybe you forgot to specify a dependency? See also the whitelist_externals envconfig setting.
といったエラーが出ます. toxのcommandsからpython以外のコマンド(bats)を呼び出しているために出るエラーです.
2をやらないと,
tput: No value for $TERM and no -T specified ERROR: InvocationError for command '/usr/local/bin/bats tests/test_all.bats' (exited with code 2)
といったエラーが出ます. toxからbatsを実行すると,batsが利用しているtputコマンドから出るエラーです.
まとめると,tox.iniでbatsを実行する際は,whitelist_externals
と--tap
を書きましょうということです.