LoginSignup
6
5

More than 5 years have passed since last update.

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

Posted at

公式ドキュメントからの抜粋
テスト関係以外のコマンドについては, 以前の記事にあります.

テスト実行関係

コマンドチートシート

キーバインド 関数名 概要
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 テスト結果バッファを開いたり閉じたりする.

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

成功していると
スクリーンショット 2016-02-29 17.04.40.png

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

alchemist-hooks-test-on-saveについて

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

alchemist-test-display-compilation-outputについて

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

キーバインドを変更する

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

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


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

6
5
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
6
5