如何使用mocha测试在nodejs中抛出异常

时间:2016-06-20 05:56:06

标签: javascript node.js mocha chai

这是我的功能

var EngineAction = function (hostUrl) {
    this.parseInput = function (vinNumber, action) {
      var requestedAction = ''
      if (action === 'START') {
        requestedAction = 'START_VEHICLE';
      } else if (action === 'STOP') {
        requestedAction = 'STOP_VEHICLE';
      } else {
        throw new Error("input action is not valid");
      }
      return { id: vinNumber,  "action" : requestedAction };
    }

    }
}

这是摩卡测试:

it('throw error,  input for engineAction', function(done) {      
   var gm = new GM ();
   expect(gm.engineAction.parseInput("123", "STATR")).to.throw(Error);
   gm.engineAction.parseInput("123", "STATR")).to.throw(Error);
   done();
});

我尝试了多种方法,但测试失败并显示消息

1) GM model test throw error,  input for engineAction:
 Error: input action is not valid
  at parseInput (models/gm.js:87:15)
  at Context.<anonymous> (test/gm.js:59:25)

这表明该方法抛出错误但测试没有断言。我错过了什么?

1 个答案:

答案 0 :(得分:1)

您需要将函数引用传递给expect

因为你想用参数调用你的方法,你需要创建一个partial function,预先绑定参数:

expect(gm.engineAction.parseInput.bind(gm, "123", "STATR")).to.throw(Error);

(这会使用gm作为您方法中的this变量,这可能是也可能不正确)

或者,您可以使用另一个函数包装您的方法:

var testFunc = function() {
  gm.engineAction.parseInput("123", "STATR"))
};
expect(testFunc).to.throw(Error);