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 https://icons.iconarchive.com/icons/hopstarter/sleek-xp-basic/256/Close-2-icon.png
wget https://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 https://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と一緒に利用すると、無限ループになるという悲しいことになった。注意。