こんにちは、koga1020です。

Elixirでtestを書いていて、「今開いているファイルのテストを実行したいなー」と思うことが多々あったので、VS Code上でキーボードショートカット一発で現在開いているファイルのテストコードを実行できるようにしてみました。設定方法をまとめておきます。

実験用に、適当なフォルダでMixプロジェクトを作成してください。

$ mix new sample_app
$ cd sample_app

このプロジェクトをVS Codeで開きます。

VS Codeを開いたら、コマンドパレットから Tasks: Configure Task > Create tasks.json file from template > Others を選択します。

すると、プロジェクトの直下に .vscode/tasks.json というファイルが生成されます。

{
    // See https://go.microsoft.com/fwlink/?LinkId=733558
    // for the documentation about the tasks.json format
    "version": "2.0.0",
    "tasks": [
        {
            "label": "echo",
            "type": "shell",
            "command": "echo Hello"
        }
    ]
}

このTaskは任意のシェルコマンドやnpm scriptを書いておき、VS Codeの「Run Task」の機能から実行できるというものです。詳細なドキュメントはこちらより参照してください。

このjsonを次のように書き換えます。

     "version": "2.0.0",
     "tasks": [
         {
-            "label": "echo",
+            "label": "mix test(current file)", ・・・(1)
             "type": "shell",
-            "command": "echo Hello"
+            "command": "mix test ${file}",     ・・・(2)
+            "group": "test"                    ・・・(3)
         }
     ]
 }

内容は次の通りです。

(1) labelはTaskの名称です。わかりやすい名称をつけておきましょう。

(2) command内の${file}には開いているファイルのパスが挿入されます。mix testはファイルを指定するとそのファイルのテストだけが実行されるので、これで開いているファイルのテストコードのみ実行できます。

(3) groupには “build” と “test” が設定できます。このtaskはテストコードの実行を行うので”test”としておきましょう。

この状態で、test/task_example_test.exsを開き、コマンドパレットからTasks: Run Test Taskを実行すると、先ほど指定したlabelが出てきます。

show_label.png

そのまま実行し、testが実行されればOKです。

result.png

続いて、キーボードショートカットを設定しましょう。コマンドパレットからOpen Keyboard Shortcuts(JSON)を選択してjsonファイルを開き、次のように入力します。

[
    {
        "key": "Ctrl+T",
        "command": "workbench.action.tasks.runTask",
        "args": "mix test(current file)",
    }
]

argsにtaskのlabelの値を設定します。私はcontrol+Tで実行されるようにしています。これはお好みで設定してください。

設定が終わったら、test/task_example_test.exsを開いた状態で設定したキーボードを入力してください。mix testが実行されればOKです。

mix_test.gif

これでテストを修正し、テストを実行したいタイミングでキーボード一発で動かせるようになりました!

終わりに

このやり方とは別にテストコードの変更を検出して自動でtestを走りっぱなしにしてくれるmix test.watchもあるのですが、マシンが重くなることがあり、最近ではこのやり方でテストを実行しています。mix formatなど、他にもコマンドを登録していくと快適なElixir開発環境になりそうです。ぜひお試しください。