Chai.js中的友情/自定义错误

时间:2016-01-07 20:40:32

标签: javascript node.js bdd chai

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

目前,这样一个失败的断言:

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

expect('String', 'Should be a Number').to.be.a('number');

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

就堆栈跟踪而言,我试过这个,没有任何成功:

chai.config.includeStack = false;

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

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

我不确定你是否想要采用这种方法,但你可以创建一个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,它们都是属性和方法,所以显示的实现非常具体()

更多信息here