21 Feb 2014, 15:19

EmacsでRSpec環境をめちゃガチャパワーアップしたまとめ

はじめに

Emacs環境でのRSpec環境を強化しようと思った。

結果的にはEmacsうんぬんとあまり関係なく、 尻すぼみになってしまったけど、まあいいや。

これは前回の記事の続編。

環境

<div class="outline-text-3" id="text-1-1">
  <ul class="org-ul">
    <li>
      Emacs 24.3.1
    </li>
    <li>
      Ruby 2.1.0
    </li>
  </ul>

  <p>
    [toc]
  </p></p>
</div></p>

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

カラー表示

<div class="outline-text-4" id="text-4-0-1">
  <p>
    ~/.rspecをつくると、rspecがカラーになる。
  </p>

  <pre><code>/.rspec

–format nested –color

デスクトップ通知

<div class="outline-text-4" id="text-4-0-2">
  <p>
    autotest/discover.rbに以下を書くと、テストの成功時、失敗時のアクションが定義できる。
  </p>

  <pre><code>Autotest.add_hook :green do

end

Autotest.add_hook :red do end

  <p>
    たとえばLinux Mintだと、notify-sendコマンドを使えばデスクトップ通知が可能だ。notify-sendのインストールは以下の過去記事参照。
  </p>

  <ul class="org-ul">
    <li>
      <a href="http://futurismo.biz/archives/2160">GTDの規律に従い生産性Up!!3分後にデスクトップ通知と音を鳴らすワンラインスクリプト(Linux) | Futurismo</a>
    </li>
  </ul>

  <p>
    アイコンはフリー素材からひろった。
  </p>

  <ul class="org-ul">
    <li>
      <a href="http://www.iconarchive.com/">http://www.iconarchive.com/</a>
    </li>
  </ul>

  <pre><code>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

  <p>
    めっちゃくちゃいい感じに表示される!これはテンションアップ。
  </p>

  <pre><code>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で動かす

<div class="outline-text-4" id="text-4-0-3">
  <p>
    autotestをEmacs上で動かす elispもある。
  </p>

  <pre><code>wget http://www.emacswiki.org/cgi-bin/emacs/download/autotest.el

  <p>
    だがしかし、自分の環境ではうまくうごかなかった。。。 emacs上でshellをたちあげて、autotestを実行すると同じことができる。
  </p>

  <ul class="org-ul">
    <li>
      <a href="https://github.com/dchelimsky/rspec/wiki/autotest-integration">Autotest Integration · dchelimsky/rspec Wiki</a>
    </li>
    <li>
      <a href="http://tmtms.hatenablog.com/entry/20110101/rspec">RSpec で autotest &#8211; @tmtms のメモ</a>
    </li>
    <li>
      <a href="http://d.hatena.ne.jp/amacou/20080908/1220893836">autotest,RSpec,Emacsで快適テスト環境をつくる(あとGrowlも) &#8211; AorBorF</a>
    </li>
  </ul>
</div></p>

rspec-kickstarter

RSpecのテストコードを自動生成するツール。以下の記事を参照。

simplecov

RSpecと組み合わせてカバレッジをとるツール。

gem install simplecov 

spec_helper.rbに以下の2行を追加するだけ。すごくsimple!

require 'simplecov'
SimpleCov.start

ただし、autotestと一緒に利用すると、無限ループになるという悲しいことになった。注意。