emacsのalchemist-modeについての備忘録(テスト関連)

[公式ドキュメント](https://github.com/tonini/alchemist.el)からの抜粋
テスト関係以外のコマンドについては, [以前の記事](http://qiita.com/ak-ymst/items/9b1514710f8ff4442471)にあります.

# テスト実行関係

## コマンドチートシート

| キーバインド | 関数名 | 概要 |
|:-----------|-------|:-----|
| `C-c a t` | alchemist-mix-test | 現在のプロジェクトのすべてのテスト実行. `mix test` |
| `C-c a r`  | alchemist-mix-rerun-last-test | 直前のテストを再実行 |
| `C-c a m t f` | alchemist-mix-test-file | ファイル名を指定してテストを実行. `mix test <FILENAME>` |
| `C-c a m t b` | alchemist-mix-test-this-buffer | 現在のバッファに含まれるすべてのテストを実行. |
| `C-c a m t .` | alchemist-mix-test-at-point | 現在のカーソル位置にあるテストを実行. `mix test <FILENAME>:<LINE_NUBMER>` |

書いている時に知ったのですが, 
`mix test <FILENAME>:<LINE_NUBMER>`
という実行するテストの指定の仕方もあったんですね.(手動で何行目とか指定するとは思えませんが...)


# ファイル操作関係(公式ではProject関係)

## コマンドチートシート

| キーバインド | 関数名 | 概要 |
|:-----------|-------|:-----|
| `C-c a p s`| alchemist-project-toggle-file-and-tests | 現在のバッファのファイルを対応するファイル [^1] に切り替える |
| `C-c a p o` | alchemist-project-toggle-file-and-tests-other-window | 現在のバッファのファイルに対応するファイル[^1]を別ウィンドウで開く |
| `C-c a p t` | alchemist-project-run-tests-for-current-file | 現在のバッファに対応したテストファイルを実行する |
| `C-c M-r` | alchemist-test-toggle-test-report-display | テスト結果バッファを開いたり閉じたりする. |

[^1]: 現在のバッファがコントローラやモデルなら, それに対応したテストファイルであり, 現在のバッファがテストならば, テスト対象のファイルのこと.



# alchemist-modeで定義済みの変数

| 変数名 | デフォルト値 | 概要 |
|:-----------|-------|:-----|
| alchemist-test-mode-highlight-tests | t | test, assert_\*, refuse_\*などのキーワードをハイライトするか? |
| alchemist-test-ask-about-save | t | テスト実行前にセーブするか尋ねるか? |
| alchemist-test-status-modeline | t | テストの通過状況に合わせてモードラインの色を変えるか? |
| alchemist-test-display-compilation-output | nil | Show compilation output in test report. |
| alchemist-hooks-test-on-save | nil | ファイル保存時に自動でテストを実行するか？ |

## alchemist-test-status-modelineについて
この経数をtにしておくと, 直前のテストが失敗していると
![スクリーンショット 2016-02-29 17.03.48.png](https://qiita-image-store.s3.amazonaws.com/0/111295/be9ae556-d767-f89c-2b0d-71a0a0aa881f.png)

成功していると
![スクリーンショット 2016-02-29 17.04.40.png](https://qiita-image-store.s3.amazonaws.com/0/111295/1957da9a-78fb-072b-b8e8-99c5f5524047.png)

このように色が変わります。

## alchemist-hooks-test-on-saveについて
この変数をtにしておくと, ファイル保存時に自動でテストが実行されます.
この時に実行されるテストは, 保存したファイルに対応するテストだけでなく, すべてのテストが実行される(mix test)ので, 注意が必要です.(テストが増えてきたりDBアクセスや外部APIにアクセスするテストを書いていると遅くなる恐れがある)
emacsを使っていない場合も, [こちらにあるように](http://qiita.com/letusfly85/items/d7387e0a0453762fbd37)自動的にテストを実行させることはできるようです.

 
## alchemist-test-display-compilation-outputについて
この変数についてですが, 挙動がわかりませんでした.
何かわかる方がおりましたら, 情報お願いします.


# キーバインドを変更する
色々と関数が用意されているが, どれもコマンドが長いのでよく使う関数に別のキーバインドを割り当てていくことにする.

```el:init.el
(when (require 'elixir-mode)
  (require 'alchemist)
  (add-hook 'elixir-mode-hook 'ac-alchemist-setup)

  (define-key alchemist-mode-map (kbd "C-c t t") 'alchemist-mix-test-this-buffer)
  (define-key alchemist-mode-map (kbd "C-c t s") 'alchemist-mix-test)
  (define-key alchemist-mode-map (kbd "C-c t r") 'alchemist-mix-rerun-last-test)
  (define-key alchemist-mode-map (kbd "C-c t .") 'alchemist-mix-test-at-point)
  (define-key alchemist-mode-map (kbd "C-c t o") 'alchemist-project-toggle-file-and-tests-other-window)
  (define-key alchemist-mode-map (kbd "C-c t g") 'alchemist-test-toggle-test-report-display)
    
  )
```

テスト関係のコマンドは, `C-c t`を共通のプレフィックスとして, 

- 最もよく使うであろう, 現在のバッファのテスト実行に`C-c t t`
- カーソル位置にあるテストを実行に`C-c t .`
- テスト全体(suite)の実行に`C-c t s`
- 直前のテストの再実行(repeat)に`C-c t r`
- 普段テストとテスト対象を別ウィンドに並べて表示しながら開発しているので, やりやすいように対応ファイルを開くコマンドを`C-c t o`
- テスト結果バッファの開け閉めは, 圧倒的に閉じること用途が多そうなので`C-c t g`

何かの参考になれば幸いです。

# 参考サイト
Alchemist公式: https://github.com/tonini/alchemist.el
ElixirでもRubyのguardみたいにファイル変更時に自動でテストが走らせたい！そんな時は、mix-test.watchを使ってみよう！: http://qiita.com/letusfly85/items/d7387e0a0453762fbd37