JavaScriptのテスト事情-ダイジェスト版-

os0x(Shogo Ohta), 2011-10-13

slide show

Profile

WEB+DB PRESS Vol.65

JavaScriptベストプラクティスラボ 【第3回】CoffeeScriptから学ぶJavaScriptプラクティス

10/22発売

大規模開発に欠かせない物、それは…

テスト

Theme

JavaScriptのテスト

テスト事情

「JavaScriptをバリバリテストしてます。」とかあんまり聞かない…

JavaScriptのテスト環境はまだまだ未成熟

ところで、ここでいうテストには「JavaScriptのテスト」か、「JavaScriptを含めたテスト」の2つがあります。

前者はJavaScriptエンジンさえあればできますが、ライブラリ作者とかでない限り、あまり重要ではありません。

後者はアプリケーションを取り巻く環境一式とクライアント(つまりはブラウザ)が必要となる(所謂、インテグレーションテスト)ので、大変ですが効果は高いです。

なぜインテグレーションテストが大事なのか

インテグレーションテストは書くのは大変で、直すのはすごく大変だし、実行も遅い。

その代わり、その機能が動いていることを確実に保証できる(ようにテストを書くことができる)。

インテグレーションテストの定番・selenium!

遅い遅いとよく言われますが、selenium自体はそんなに遅くない。

インテグレーションテストはどうしても遅いので、むしろseleniumはとばっちり…。(とはいえ速いわけではない)

テストの実行環境

Railsでは

などがある

capybara-webkit

https://github.com/thoughtbot/capybara-webkit

テストのフレームワーク

色々ありますが、QUnitとJasmineが人気

QUnitはUnitテストなので、どちらかといえばライブラリ(作者)向け(アプリケーションに使えないわけではないし、そういうアプローチもある)

JasmineはBDD(behavior-driven development)スタイルで、アプリケーションのspecを書くことができる

describe("Jasmine", function() {
  it("makes testing JavaScript awesome!", function() {
    expect(yourCode).toBeLotsBetter();
  });
});
describe "Jasmine", ->
  it "makes testing JavaScript awesome!", ->
    expect(yourCode).toBeLotsBetter()

おまけのCoffeeScript!

でも実行環境が面倒?

jasmine-headless-webkit

http://johnbintz.github.com/jasmine-headless-webkit/

JasmineのspecをCUI環境でいい感じにテストできる素敵ツール

JavaScriptのテスト環境もだいぶ整ってきたので、是非お試しいただければと。