Mocha / chai断言失败但没有差异

时间:2016-03-29 23:07:49

标签: javascript mocha chai

我在javascript中创建了一个二叉树类,但我的测试失败但我没有看到我的方法有任何问题,而且我没有收到任何差异。任何见解都会很棒。

这是我的班级:

def self.enqueue(updatable:, action:)
  DelayedSync.create(updatable: updatable, status: :queued, action: action)
rescue ActiveRecord::RecordNotUnique
  queued_update = DelayedSync.find_by(updatable: updatable, status: :queued, action: :sync_update)
  if action == :sync_delete && queued_update.present?
    queued_update.sync_delete!
  else
    Rails.logger.debug "#{updatable.class.name} #{updatable.id} already queued for sync, skipping."
  end
end

这是我的测试:

    function binaryTree() {
      this.root = null;
    };
    binaryTree.prototype = {
    constructor: binaryTree,
    add: function(val) {
        var root = this.root;
        if(!root) {
          this.root = new Node(val);
          return;
        }
        var currentNode = root;
        var newNode = new Node(val);
        while(currentNode) {
          if(val < currentNode.value) {
            if(!currentNode.left) {
              currentNode.left = newNode;
              break;
            }
            else {
              currentNode = currentNode.left;
            }
          }
          else {
            if(!currentNode.right) {
              currentNode.right = newNode;
              break;
            }
            else {
              currentNode = currentNode.right;
            }
          }
        }
      }

这是我得到的错误:

it('adds values to the binary tree', function () {
  var test = new binaryTree();
  test.add(7);
  test.add(43);
  test.add(13);
  test.add(27);
  test.add(82);
  test.add(2);
  test.add(19);
  test.add(8);
  test.add(1);
  test.add(92);

  expect(test).to.equal({
    root:
     { value: 7,
       left:
        { value: 2,
          left: { value: 1, left: null, right: null },
          right: null },
       right:
        { value: 43,
          left:
           { value: 13,
             left: { value: 8, left: null, right: null },
             right:
              { value: 27,
                left: { value: 19, left: null, right: null },
                right: null } },
          right:
           { value: 82,
             left: null,
             right: { value: 92, left: null, right: null } } } }
  });
});

如果我弄乱测试对象中的值,我会看到差异出现,所以它看起来像是一切都是平等的,我很难过。如果我能得到第二双眼睛,我真的很感激。

2 个答案:

答案 0 :(得分:1)

您正在使用Mocha的to.equal期望值,但这会测试严格的相等性。 http://chaijs.com/api/bdd/#method_equal

两个对象,即使它们具有所有相同的键值对,也不会返回true到三等于(===)比较器。这是因为它们实际上是存储在内存中的两个独立对象,看起来很相似。

改为使用to.deep.equal

有意义吗?

答案 1 :(得分:0)

如果遇到任何人,我发现了这个问题。即使所有属性都相同,在JavaScript中也无法完美地比较两个对象。 This post有两种解决此限制的方法,其中一种方法在这种情况下很容易实现:

expect(test).to.equal({更改为expect(JSON.stringify(test)).to.equal(JSON.stringify({将允许此测试通过。对对象进行字符串化是比较两个对象的一种非常简单的方法,但这只有在属性完全相同的情况下才有效。