はじめに
Emacs環境でのRSpec環境を強化しようと思った。
結果的にはEmacsうんぬんとあまり関係なく、 尻すぼみになってしまったけど、まあいいや。
これは前回の記事の続編。
環境
- Emacs 24.3.1
- Ruby 2.1.0
rspec-mode
まずは定番のrspec-modeを導入。
(require 'rspec-mode)
(eval-after-load 'rspec-mode
'(rspec-install-snippets))
RSpec関係のショートカットを実行すると Could not determine the project root.とでてしまう。
以下を参考にして、空Rakefileを作成する。おまじないも書く。
(custom-set-variables '(rspec-use-rake-flag nil))
(custom-set-faces )
これでショートカットが動く。
C-c , v RSpec実行
C-c , s カ-ソルが当たっているサンプルを実行
C-c , t Specとソースを切り替える
rspecを実行したときのバッファが主張しすぎだと思う場合は、popwinで調整。
(push '("*rspec-compilation*" :regexp t) popwin:special-display-config)
yasnippet
rspec用の yasnippetを導入する。これで入力が楽になる。
git clone git@github.com:gary/yasnippets-rspec.git
とりあえず githubから落としてきて、ruby-modeのフォルダに突っ込んだ。 なんか、やりかたが違う気がするけど。。。
auto-test
保存時にRSpecを自動で動かすためのツール。
まずは、autotestを入れる。
gem install ZenTest
libにテスト対象コード、specにテストコードを入れる。 プロジェクトルートにautotestというディレクトリをつくり、 そのなかにdiscover.rbを作成。
プロジェクトルートで autotestを起動。テストを編集して、勝手にテストが走れば成功。
mkdir autotest
echo 'Autotest.add_discovery { "rspec2" }' > autotest/discover.rb
autotest
カラー表示
~/.rspecをつくると、rspecがカラーになる。
/.rspec
--format nested
--color
デスクトップ通知
autotest/discover.rbに以下を書くと、テストの成功時、失敗時のアクションが定義できる。
Autotest.add_hook :green do
end
Autotest.add_hook :red do
end
たとえばLinux Mintだと、notify-sendコマンドを使えばデスクトップ通知が可能だ。notify-sendのインストールは以下の過去記事参照。
アイコンはフリー素材からひろった。
wget http://icons.iconarchive.com/icons/hopstarter/sleek-xp-basic/256/Close-2-icon.png
wget http://icons.iconarchive.com/icons/oxygen-icons.org/oxygen/256/Actions-dialog-ok-apply-icon.png
めっちゃくちゃいい感じに表示される!これはテンションアップ。
Autotest.add_discovery { "rspec2" }
Autotest.add_hook :green do
system 'notify-send -i ~/Pictures/tdd/Actions-dialog-ok-apply-icon.png OK'
end
Autotest.add_hook :red do
system 'notify-send -i ~/Pictures/tdd/Close-2-icon.png Error'
end
Emacsで動かす
autotestをEmacs上で動かす elispもある。
wget http://www.emacswiki.org/cgi-bin/emacs/download/autotest.el
だがしかし、自分の環境ではうまくうごかなかった。。。 emacs上でshellをたちあげて、autotestを実行すると同じことができる。
rspec-kickstarter
RSpecのテストコードを自動生成するツール。以下の記事を参照。
simplecov
RSpecと組み合わせてカバレッジをとるツール。
gem install simplecov
spec_helper.rbに以下の2行を追加するだけ。すごくsimple!
require 'simplecov'
SimpleCov.start
ただし、autotestと一緒に利用すると、無限ループになるという悲しいことになった。注意。