javascript - 为什么 Jasmine 在我提出并捕获错误时失败了?

标签 javascript jasmine

我提出了我试图捕获但未捕获的相同错误

我的代码是:

SimpleMath.prototype.getFactorial = function(number) {
  if (number < 0) {
    throw new Error("Cannot be less than zero");
  }
  else if (number == 0) {
    return 0;
  }
  else if (number == 1) {
    return 1;
  }
  else {
    return number * this.getFactorial(number-1);
  }
}

我的测试如下。前 2 个有效,但引发异常的最后一个失败:

describe("SimpleMath", function() {
  var simpleMath;

  beforeEach(function() {
    simpleMath = new SimpleMath();
    var result;
  }); 

  it("should calculate a factorial for a positive number", function() {
    result=simpleMath.getFactorial(3);
    expect(result).toEqual(6);
  }); 

  it("should calculate a factorial for 0 - which will be zero", function() {
    result=simpleMath.getFactorial(0);
    expect(result).toEqual(0);
  }); 

  it("should calculate a factorial for -3 - which will raise an error", function() {
  expect(
    function() {
      simpleMath.getFactorial(-3)
    }).toThrow("Cannot be less than zero");
  }); 

});

运行与失败:

3 specs, 1 failure
Spec List | Failures
SimpleMath should calculate a factorial for -3 - which will raise an error
Expected function to throw 'Cannot be less than zero', but it threw Error: Cannot be less than zero.

我尝试在消息末尾添加句点,因为输出显示如此,但没有帮助。

最佳答案

由于您正在使用 toThrow(),因此您应该实例化一个 Error 实例:

expect(
  function() {
    simpleMath.getFactorial(-3)
  }).toThrow(new Error("Cannot be less than zero"));
}); 

您还可以使用 toThrowError()允许检查没有错误类型的消息:

expect(
  function() {
    simpleMath.getFactorial(-3)
  }).toThrowError("Cannot be less than zero");
}); 

关于javascript - 为什么 Jasmine 在我提出并捕获错误时失败了?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44052830/

相关文章:

javascript - SignalR 无法重新连接到 JavaScript 客户端中的服务器

javascript - 在数组对象内循环

javascript - Express 服务器为我的静态文件提供服务,但不处理对我的 API 的请求。怎么了?

angular - 是否可以在 Angular 中模拟属性指令?

javascript - 如何添加一个值并嵌套一个对象

javascript - Chrome 开发者工具中 Javascript 旁边的列中显示的时间是多少?

javascript - Karma 覆盖范围无法识别分支测试

javascript - 如何使用 Jasmine 验证 jQuery AJAX 事件?

javascript - SpyOn $ Jquery 与 Jasmine 不工作

unit-testing - Jasmine:每个 "it"一个匹配器还是多个?