【Elixir】Visual Studio CodeとExUnitを連携させて失敗ケースを一覧表示、ジャンプ、マークする


ゴール

    • エディタ内でテスト実行、結果表示を完結(画像右側)。
    • 失敗ケースの宣言行にマーク(画像左側)。
      • マウスオーバーによるメッセージの表示。
  • できていないこと
    • アサーションに失敗した行番号の情報取得、紐付け。
  • 不具合?
    • たまにテスト実行が行われず、マークだけ消えることがある。
      • Outputを見れば一目瞭然なので気付くことはできる。

想定

  • Visual Studio CodeとExUnitの基本的な使い方を知っており、セットアップ済み。
  • エディタ内で完結する形で、ExUnitとの連携を試してみたい人向け。
  • 所要時間3~5分。

書いた人の環境

  • Windows 10
  • Visual Studio Code 0.10.6
  • Elixir 1.1.0
    • Web Installerでセットアップ。

前提

  • プロジェクトのルートディレクトリで $ mix test が正しく実行できる。
    • $ mix new でプロジェクト作成していれば多分OK。
  • ExUnitの出力形式などを変更していない。
    • Elixirをセットアップしたままの状態ならOK。
  • Visual Studio Codeでプロジェクトのルートディレクトリを開いている。
    • Ctrl+Shift+E で表示されるExplorerに Open Folder のボタンが無ければOK。

試す

  • プロジェクトのルートに生成される .vscode フォルダの中にある、 tasks.json ファイル(UTF-8)を、以下の内容で全て上書きする。
    • フォルダとファイルが無い場合
      • ビルドかテストのタスク実行( Ctrl+Shift+B or Ctrl+Shift+T )をすると、以下の様な表示がされる。
      • 右側のConfigure Task Runnerをクリックすると、フォルダとファイルが生成される。
.vscode/tasks.json
{
  "version": "0.1.0",
  "command": "mix",
  "isShellCommand": true,
  "showOutput": "always",
  "tasks": [
    {
      "taskName": "test current",
      // Assign this task as "Test Task". Ctrl+Shift+T (default) to run.
      "isTestCommand": true,
      "suppressTaskName": true,
      "args": [
        "test",
        "${file}"
      ],
      "echoCommand": true,
      "problemMatcher": {
        "owner": "elixir",
        "fileLocation": ["relative", "${workspaceRoot}"],
        "pattern": [
          {
            "regexp": "\\s*\\d+\\).*\\(.*\\)$"
          },
          {
            "regexp": "\\s+([^:]*):(\\d*)$",
            "file": 1,
            "line": 2
          },
          {
            "regexp": "^\\s+(.*)$",
            "message": 1
          }
        ]
      }
    }
  ]
}
  • 何かしらのアサーションが失敗するようにしておく。
  • テストコードのファイルを開いているエディタをアクティブにする。
  • Ctrl+Shift+T あるいは Ctrl+Pで表示されるパレットにtask test currentと入力すると、アクティブなエディタで開いているファイルのパスを渡してテストが実行される。
  • 終わるまで眺める。
    • エディタのウィンドウ左下にある表示 の左で記号がクルクルしていたら処理中。
    • Output ビューが表示される。
    • の数値が変わる。
  • をクリックするか、 Ctrl+Shift+M で失敗箇所の一覧が表示される。
  • 項目を選択すると、当該ファイルの失敗行にジャンプする。
  • 失敗行は赤線が表示され、スクロールバーの該当位置に赤い四角が表示される。
    • 赤線行にマウスオーバーすると、エラー内容がポップアップ表示される。
  • 修正して再度テストを実行すると、アンダーラインが消える。
  • Enjoy!

テストを全件実行したい

.vscode/tasks.json
// (省略)
      "args": [
        "test",
        "${file}"
      ],
// (省略)

ここを

.vscode/tasks.json
// (省略)
      "args": [
        "test"
      ],
// (省略)

に変更。

Output出したくない

.vscode/tasks.json
// (省略)
  "showOutput": "always",
// (省略)

ここを

.vscode/tasks.json
// (省略)
  "showOutput": "silent",
// (省略)

に変更。

書いていないこと