LoginSignup
9
6

More than 5 years have passed since last update.

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

Posted at

ゴール

  • スクリーンショット_123015_053623_AM.jpg
    • エディタ内でテスト実行、結果表示を完結(画像右側)。
    • 失敗ケースの宣言行にマーク(画像左側)。
      • マウスオーバーによるメッセージの表示。
  • できていないこと
    • アサーションに失敗した行番号の情報取得、紐付け。
  • 不具合?
    • たまにテスト実行が行われず、マークだけ消えることがある。
      • 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。
    • スクリーンショット_122915_090249_PM.jpg

試す

  • プロジェクトのルートに生成される .vscode フォルダの中にある、 tasks.json ファイル(UTF-8)を、以下の内容で全て上書きする。
    • フォルダとファイルが無い場合
      • ビルドかテストのタスク実行( Ctrl+Shift+B or Ctrl+Shift+T )をすると、以下の様な表示がされる。
      • スクリーンショット_123015_062254_AM.jpg
      • 右側の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と入力すると、アクティブなエディタで開いているファイルのパスを渡してテストが実行される。
  • 終わるまで眺める。
    • エディタのウィンドウ左下にある表示 スクリーンショット_122915_082732_PM.jpg の左で記号がクルクルしていたら処理中。
    • Output ビューが表示される。
      • スクリーンショット_123015_054817_AM.jpg
    • スクリーンショット_122915_082732_PM.jpg の数値が変わる。スクリーンショット_123015_064126_AM.jpg
  • スクリーンショット_123015_064126_AM.jpg をクリックするか、 Ctrl+Shift+M で失敗箇所の一覧が表示される。
    • スクリーンショット_123015_054651_AM.jpg
  • 項目を選択すると、当該ファイルの失敗行にジャンプする。
  • 失敗行は赤線が表示され、スクロールバーの該当位置に赤い四角が表示される。
    • スクリーンショット_123015_054519_AM.jpg
    • 赤線行にマウスオーバーすると、エラー内容がポップアップ表示される。
  • 修正して再度テストを実行すると、アンダーラインが消える。
    • スクリーンショット_123015_055206_AM.jpg
  • Enjoy!

テストを全件実行したい

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

ここを

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

に変更。

Output出したくない

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

ここを

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

に変更。

書いていないこと

9
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
6