VSCodeでコーディング中のRustコードを"Run test"ボタンでユニットテストする時に環境変数を効かせたかった



Run testのボタンでユニットテストするときに、何故かエラーになるので、どうしてカナ?って思った。
ターミナルから直接 cargo test するのは問題ないからコードのせいではないな、と。
最初コレ、デバッガーの機能だと勘違いしていたので、 launch.json いじくり回して悩んでいたんだ。
でもこれ、ターミナルで cargo run しているだけなんだね。
ちょっと気がつくのに時間がかかった。
そもそも、ターミナルからのテストは

$ env $(cat ../.env.sample) cargo test

と、環境変数を一時設定したshで実行していたので、 VSCode のターミナル実行も当然環境変数の設定のが必要なわけですね。
結論としては

$ tree .vscode
.vscode
├── launch.json
└── settings.json

ここに、settings.json作って環境変数を設定すると、ターミナルを開いたときに適用される。

{
    "terminal.integrated.env.linux": {
        "SET_ENV": "dev",
        "SET_DATABASE_URL": "mysql://root:[email protected]:3306/test_database01"
    }
}

こんな感じ1
めでたく、正常終了しました。

これって結局、Rustでもcragoでもなくて、VSCodeの設定の問題でしたね。
他の言語でもVSCodeのターミナル実行するケースでそのまま使えると思います。


  1. 設定して最初の一回目だけ「設定ファイル適用するか?」みたいなことを聞いてくる。「はい」と答えてもターミナルは既に開いてしまっているので、もう一度実行する必要があります。