jasmine-nodeで非同期処理のテスト

SampleSpecs.jsを見るにasyncSpecWaitとasyncSpecDoneを使うものらしい。
Zombie.jsを使ったサンプルを書いてみた。

zombie_sample_spec.coffee

例によってCoffeeScript。

describe('ゾンビがこのブログにやってきた場合', ->
  beforeEach ->
    @zombie = require "zombie"

  it 'タイトルタグの内容が取得できること', ->
    @zombie.visit "http://higelog.brassworks.jp/", (err, browser) ->
      expect(browser.text('title')).toEqual('ひげろぐ | 何かとメモなど')
      jasmine.asyncSpecDone();

    jasmine.asyncSpecWait()

  it '表示されるタイトルが取得できること', ->
    @zombie.visit "http://higelog.brassworks.jp/", (err, browser) ->
      expect(browser.text('div#blog-title')).toEqual('ひげろぐ')
      jasmine.asyncSpecDone();

    jasmine.asyncSpecWait()
)

asyncSpecWaitを置かないと非同期部分が実行される前にスペックが走り終わって、アサーションが実行されずにテストがパスしてしまう。
asyncSpecWaitを使うと、asyncSpecDoneが呼び出されるまでスペックの終了を待ってくれる。

zombie_sample_spec.js

参考までにjsのコードも。

describe('ゾンビがこのブログにやってきた場合', function() {
  beforeEach(function() {
    return this.zombie = require("zombie");
  });
  it('タイトルタグの内容が取得できること', function() {
    this.zombie.visit("http://higelog.brassworks.jp/", function(err, browser) {
      expect(browser.text('title')).toEqual('ひげろぐ | 何かとメモなど');
      return jasmine.asyncSpecDone();
    });
    return jasmine.asyncSpecWait();
  });
  return it('表示されるタイトルが取得できること', function() {
    this.zombie.visit("http://higelog.brassworks.jp/", function(err, browser) {
      expect(browser.text('div#blog-title')).toEqual('ひげろぐ');
      return jasmine.asyncSpecDone();
    });
    return jasmine.asyncSpecWait();
  });
});

前の記事

CoffeeScriptでjasmine-node