ぶるーすくりーん

ぽんこつプログラマ日記

Promise な関数を mocha でテストする

Promise 使った関数のテスト書こうとしてハマったのでメモ。

普通にdoneを使って実装したところ、アサーションに失敗した場合に、タイムアウトエラーになってしまう。

「expect は hoge なんだけど実際は fuga だったよ」って言ってほしいのにタイムアウトエラーになる。

おかしい!

// ダメな例
it('ユーザIDを指定してユーザ情報を取得できること', (done) => {
  User.findOne({id: 'test_uuid'}).then((data) => {
    expect(data.email).to.equal('hoge@example.com');
    done();
  }, (err) => {
    done(err);
  });
});



実は、mocha は正式に Promise をサポートしていて、公式ページにも記載がある。

mocha の"Working with Promises" の章


以下のように書くことで Promise を使用した関数にアサーションかけることができる。

ぷるり を読むと、わざわざエラーの場合のコードは書かなくてよいらしい。

it('ユーザIDを指定してユーザ情報を取得できること', () => {
  return User.findOne({id: 'test_uuid'}).then((data) => {
    expect(data.email).to.equal('hoge@example.com');
  });
});

これで Promise なライブラリを気持ちよくテストできてしあわせ。