Mocha で JavaScript のテストを書くと失敗した時、オブジェクトの差分が表示されることがあります。あれを表示する方法を調べてみました。

インストール

$ npm install -g mocha

結論

結論から書くと throw された例外オブジェクトに actualexpected というプロパティがあると差分が表示されるみたいです。

// test/a.js

const assert = require('assert');

const x = { a: 1, b: 2, c: 3 };
const y = { b: 2, c: 4, d: 5 };

it('a', () => {
    const e = Error();
    e.actual = x;
    e.expected = y;
    throw e;
});

これを実行すると差分が表示されてテストに失敗します。

$ mocha


  1) a

  0 passing (13ms)
  1 failing

  1)  a:


      + expected - actual

       {
      -  "a": 1
         "b": 2
      -  "c": 3
      +  "c": 4
      +  "d": 5
       }

  rror
      at Error (native)
      at Context.<anonymous> (test/a.js:7:15)

余分なプロパティや足りないプロパティがわかりやすく表示されました。

テストが失敗した時のメッセージを見やすくするために power-assert を使ったりもしますが、こういう方法も覚えておくとデバッグを楽にできるかもしれません。