Evergreen を導入したばかりだけど Konacha に移行した

先日 Evergreen を導入したけど

Evergreen は今メンテされてないってコメントで教えてもらった。確かに、README よく見たら書いてあるし…。完全に見落としてた。不覚。

README のリンク先、Google グループのスレッドでは Konacha っていう Rails エンジンが勧められていた。コメントで教えてもらったのもコレ。

Evergreen 入れたばかりだけど、Konacha に移行しよう。

Konacha をインストール

Gemfile に

group :development, :test do
  gem "konacha"
  gem "capybara-webkit"
end

を記述して、

bundle

を実行してインストール。

Headless テストも試すから、capybara-webkit もインストールしている。

Konacha の設定ファイルを作成

RAILS_ROOT/config/initializer/konacha.rb を作成。

# coding: utf-8

Konacha.configure do |config|
  config.spec_dir = "spec/javascripts"
  config.driver = :webkit
  config.stylesheets = %w(application)
end if defined?(Konacha)

JavaScript ドライバに webkit を指定している。capybara-webkit と組み合わせることで、Headless テストが可能。

余談だけど、README に「PhantomJS をインストールしたらドライバに poltergeist が使える」みたいなことが書かれているから試してみたら「poltergeist はサポートしていない」っていうエラーが発生した。やり方間違ってる?今回はパス。

JavaScript のスペックを記述

Konacha で実行できるように、JavaScript のスペックを修正する。スペックファイルは RAILS_ROOT/spec/javascripts 下に作成。

//= require application

describe("List", function() {
  describe("toJSON", function() {
    it("idとnameが格納されている", function() {
      var list = new App.Models.List({id:100, name:"foo"});
      var json = list.toJSON();
      json.id.should.equal(100);
      json.name.should.equal("foo");
    });
  });
});

Rails の asset pipeline に対応しているので、require で外部の JavaScript ファイルを読み込める。

Evergreen は Jasmine だったのに対し、Konacha では Mocha なので、Mocha を使ったテストに修正した。といっても Jasmine と大して変わってないけど。

Jasmine のアサーションは使えないけど、代わりに chai というアサーションライブラリが使えるので、それにも対応。

テストを実行

まずはブラウザでテスト。

bundle exec rake konacha:serve

を実行すると開発サーバーが起動する。
http://localhost:3500/ をブラウザで表示すると、テストが実行された。
f:id:griefworker:20121212223403p:plain
デザインは超シンプル。

続いて、Headless テストも実行してみる。

bundle exec rake konacha:run

f:id:griefworker:20121212223420p:plain
Konacha でもちゃんと端末上でテストが完了した。

まとめ

Evergreen の README をちゃんと読んでなかったばかりに、Evergreen 導入してすぐ Konacha に移動することになってしまった。

Konacha でも Evergreen 同様、ブラウザで JavaScript のテストが実行できたし、Headless テストもできた。

Rails 周辺は進化が早いので、Evergreen がメンテされていない以上、Konacha を使った方がいいね。