摩卡仔自定义比较功能

时间:2016-11-30 14:23:17

标签: javascript node.js mocha integration-testing chai

我对Mocha和Chai来说是全新的。我在测试中创建了一个比较两个对象的函数。

function compareExtremelyCompexObject (testedObject, trueObject);

如何编写使用我的compareExtremelyCompexObject函数来断言测试的Mocha Chai规范?

我有这样的事情:

it('should create a specific complex object from boilerplate data', function(done) {
  importDataFromSystem().
    .end(function(err, res){
          var dummyComplexObject = getBoilerplateComplexObject();
          compareExtremelyCompexObject(res, dummyComplexObject);
          done();
      });
    });
});

到目前为止我发现的例子都缺少如何比较复杂的对象。可以通过"应该" /"期待"?

来实现

如果这还不够明确,请告诉我。我好几天都在研究这个问题。任何帮助都将深表感谢!

1 个答案:

答案 0 :(得分:0)

我认为你应该稍微编辑你的问题,以简化,但从我收集的内容,你想用你的自定义函数断言你的新对象===测试对象?如果是这种情况,假设compareExtremelyCompexObject返回true或false,那么你几乎就在那里。

it('should create a specific complex object from boilerplate data', function(done) {
  importDataFromSystem()
    .end(function(err, res){
          var dummyComplexObject = getBoilerplateComplexObject();
          // with assert
          assert(compareExtremelyCompexObject(res, dummyComplexObject));
          // or with chai expect
          expect(compareExtremelyCompexObject(res, dummyComplexObject)).to.be.true;
          done();
      });
    });
});

根据您的评论,importDataFromSystem链接的方式意味着它返回流,承诺或其自身。让我们说它是一个在'结束时调用回调的流。那么res很可能就是你要找的东西,所以上面的例子应该有效。但是,如果res不是您正在寻找的内容,那么您可能必须解决一个承诺并将这些承诺链起来以确保同步的操作顺序。例如

it('should create a specific complex object from boilerplate data', function(done) {

  Promise.resolve()
    .then(function(){
         return importDataFromSystem();
    })
    .then(function(){
         return assert(compareExtremelyCompexObject(getNewlyCreatedObject(), getBoilerplateComplexObject()));
         // assert should throw error and be caught if the two objects are not equal
    })
    .then(function(){
         done()
    })
    .catch(function(err){ 
         done( err ); 
    });

});

但是,当然,您需要一些方法获取您创建的对象。这是另一个讨论。您应该编辑您的问题,以缩小主题,只处理自定义比较的断言。 (或冒险downvotes,我会通过代理人投降。=]