sqlalchemy-migrateのtestコマンドは、想像していたテストとは違った
python manage.py test
でscript
ファイルのテストができて、たとえエラーだったとしても冪等性が守られてるもんだと思ってた。
test
って言ったら、upgrade
してdowngrade
してあってたらOKの判定してくれて、仮に間違ってたとしてもtest前の状態から変わっていません!ってのを想像してた
でも、実際はupgrade
して、downgrade
しるだけっぽい。だから、upgrade
だけ成功して、downgrade
失敗すると中途半端な状態になる可能性がある。
確かに、ソース追ってみるとコマンドのところに
def test(url, repository, **opts): """%prog test URL REPOSITORY_PATH [VERSION] Performs the upgrade and downgrade option on the given database. This is not a real test and may leave the database in a bad state. You should therefore better run the test on a copy of your database. """
って書いてあるし。。。
中途半端な状態になる可能性があるなら、個別にupgrade
downgrade
を試せばいいのでは?
ちなみに、‘script`はバージョン3まで進んでいるけど、DBのバージョン1とか、複数バージョンにまたがったtestも失敗する可能性がある模様
最新のスクリプトが最新反映済みのDBへ成功するかどうかしか見ていない気がする
testコマンドの使いどころがわからん