Chai.js中的Friendlier/Custom错误



我正在使用chai.js断言库来查找半技术专业人员创建的清单中可能存在的错误。换言之,正在编写配置,但极有可能出现人为错误。

目前,一个失败的断言如下:

var expect = require('chai').expect;
expect('String', 'Should be a Number').to.be.a('number');

导致抛出一个错误,并显示完整的堆栈。我可以通过指示不要抛出错误来减少膨胀,同时向控制台输出一个更小、更上下文的消息吗?

在堆栈跟踪方面,我尝试过这个,但没有成功:

chai.config.includeStack = false;

免责声明:这是我第一次尝试使用chai.js库。

expect在失败时抛出一个错误,因此您可以将每个调用封装在try/catch中,并只使用您想要的部分:

var expect = require("chai").expect;
function friendlyAssert (test) {
  try { test() }
  catch (e) { console.log(e.message); }
}
// logs a message
friendlyAssert(function () {
  expect("string", "Should be a number").to.be.a("number");
});
// completes silently
friendlyAssert(function () {
  expect(8, "Should be a number").to.be.a("number");
})
// output:
// Should be a number: expected 'string' to be a number

我不确定你是否想走这条路,但你可以创建一个Chai插件,用一个捕获错误并只显示错误的实现来覆盖a/an,而不是抛出异常。

例如:

var chai   = require('chai');
var expect = chai.expect;
chai.use(function(_chai, utils) {
  function newImpl(_super) {
    return function () {
      var r = _super.apply(this, arguments);
      return function() {
        try {
          return r.apply(this, arguments);
        } catch(e) {
          console.log(e.message);
        }
      };
    }
  };
  [ 'a', 'an' ].forEach((prop) => {
    _chai.Assertion.overwriteProperty(prop,  newImpl);
  });
});
expect('String', 'Should be a Number').to.be.a('string');

您需要覆盖测试中使用的所有方法和属性(上面的代码只处理a/an,它们既是属性又是方法,因此所示的实现非常具体)。

点击此处了解更多信息。

最新更新