【问题标题】:Deep Diff Test Failures in Karma with Mocha使用 Mocha 在 Karma 中进行深度差异测试失败
【发布时间】:2014-10-15 18:32:23
【问题描述】:

我正在运行以下测试:

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
  • 业力摩卡 0.1.6
  • karma-mocha-reporter 0.3.0
  • 因果报应 0.1.0

【问题讨论】:

  • 你有想过这个吗?
  • 很遗憾,我还没有找到解决方案
  • 我将不得不再次使用 Jasmine

标签: mocha.js karma-runner chai


【解决方案1】:

摩卡记者对此有一个选择:showDiff: true

您可以将其粘贴到您的 karma 配置中:

config.set({
    frameworks: [ 'mocha', 'chai', ... ],
    plugins: [
        require('karma-mocha'),
        require('karma-chai'),
        require('karma-mocha-reporter'),
        ...
    ],
    reporters: [ 'mocha', ... ],
    mochaReporter: {
        showDiff: true, // <-- This!
    },
    ...
});

【讨论】:

    【解决方案2】:

    您可以使用 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
         }
       }
     }
    

    【讨论】:

      【解决方案3】:

      您可以使用以下内容更改截断消息的位置:

      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
           }
         }
       }
      

      【讨论】:

      • 顺便说一句,即使没有截断(例如[ Array(2) ] to deeply equal [ Array(2) ]),chai.config.truncateThreshold = 0 也会有所帮助。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-26
      • 1970-01-01
      相关资源
      最近更新 更多