使用Mocha在Karma中进行Deep Diff测试失败

时间:2014-08-22 00:30:02

标签: mocha karma-runner chai

我正在进行以下测试:

describe("objects", function () {
    it("should equal", function () {
        var a = {
            a: 1,
            b: 2,
            c: {
                a: 1,
                b: 2,
                c: {
                    a: 1,
                    b: 2,
                    x: 3
                }
            }
        };

        var b = {
            a: 1,
            b: 2,
            c: {
                a: 1,
                b: 2,
                c: {
                    a: 1,
                    b: 2,
                    x: 4
                }
            }
        };
        a.should.deep.equal(b);
    });
});

测试按预期失败,但错误消息根本没有帮助。

AssertionError: expected { Object (a, b, ...) } to deeply equal { Object (a, b, ...) }

我如何得到它以便输出一个经过美化的json比较呢?

我目前正在使用的库:

  • 业力0.12.1
  • karma-mocha 0.1.6
  • karma-mocha-reporter 0.3.0
  • karma-chai 0.1.0

3 个答案:

答案 0 :(得分:4)

您可以使用以下内容更改邮件被截断的位置:

chai.config.truncateThreshold = 0

所以对你的例子来说:

var chai = require('chai');
var expect = chai.expect;

chai.config.truncateThreshold = 0;

describe.only("objects", function () {
    it("should equal", function () {
        var a = {
            a: 1,
            b: 2,
            c: {
                a: 1,
                b: 2,
                c: {
                    a: 1,
                    b: 2,
                    x: 3
                }
            }
        };

        var b = {
            a: 1,
            b: 2,
            c: {
                a: 1,
                b: 2,
                c: {
                    a: 1,
                    b: 2,
                    x: 4
                }
            }
        };
        expect(a).to.deep.equal(b);
    });
});

这将导致:

AssertionError: expected { a: 1, b: 2, c: { a: 1, b: 2, c: { a: 1, b: 2, x: 3 } } } to deeply equal { a: 1, b: 2, c: { a: 1, b: 2, c: { a: 1, b: 2, x: 4 } } }
+ expected - actual

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

答案 1 :(得分:1)

mocha记者可以选择:public frmKaliUI() { InitializeComponent(); colorFade1(); } private async void colorFade1() { Color c = Color.FromArgb(139, 0, 139); for (int i = 255; i > 0; i--) { c = Color.FromArgb(139, i, 139); this.BackColor = c; await Task.Delay(50); } }

你可以在你的业力配置中坚持这个:

showDiff: true

答案 2 :(得分:0)

您可以使用assert-diff库仅显示测试失败时的差异。

var assert = require('assert-diff');

describe("objects", function () {
    it("should equal", function () {
        var a = {
            a: 1,
            b: 2,
            c: {
                a: 1,
                b: 2,
                c: {
                    a: 1,
                    b: 2,
                    x: 3
                }
            }
        };

        var b = {
            a: 1,
            b: 2,
            c: {
                a: 1,
                b: 2,
                c: {
                    a: 1,
                    b: 2,
                    x: 4
                }
            }
        };
        assert.deepEqual(a, b);
    });
});

这会给你带来差异的错误

  1) objects should equal:
     AssertionError: { a: 1, b: 2, c: { a: 1, b: 2, c: { a: 1, b: 2, x: 3 } } } deepEqual { a: 1, b: 2, c: { a: 1, b: 2, c: { a: 1, b: 2, x: 4 } } }
 {
   c: {
     c: {
-      x: 4
+      x: 3
     }
   }
 }