gpt4 book ai didi

unit-testing - 在 Jasmine 中使用 toThrowError

转载 作者:行者123 更新时间:2023-12-03 15:15:55 29 4
gpt4 key购买 nike

我正在开发一个大量使用 JavaScript 的应用程序。我需要对这段代码进行单元测试。为了做到这一点,我依靠 Jasmine。
我的一些 JavaScript 代码抛出 JavaScript Error对象。这些对象将值分配给 Error 对象的 message 和 name 属性。我为 name 属性分配了一种异常类型。例如,有时名称设置为 OutOfRangeException ,有时它的 ArgumentException , ETC。
如何使用 toThrowError Jasmine 框架中的函数来测试抛出的错误是否具有特定名称?目前,我的 JavaScript 如下所示:

function getRandomNumber(max) {
if ((!isNaN(parseFloat(max)) && isFinite(max)) === false) {
var error = new Error('You must provide a number');
error.name = 'ArgumentException';
throw error;
}

if ((max === null) || (max < 1) || (max > 100)) {
var error = new Error('The maximum value must be greater than 0 and less than 100.');
error.name = 'ArgumentOutOfRangeException';
throw error;
}

return Math.floor(Math.random() * max) + 1;
}

function ArgumentException(message) {
this.name = 'ArgumentException';
this.message = message || '';
}
ArgumentException.prototype = new Error();
ArgumentException.prototype.constructor = ArgumentException;
如何编写一个检查 ArgumentException 的 Jasmine 测试错误或 ArgumentOutOfRangeException错误?
谢谢!

最佳答案

jasmine 不支持检查带参数的函数的异常。但是您可以使用以下解决方法来克服此限制并测试您的功能。

describe('toThrowError test case', function() {

it('test getRandomNumber function for undefined', function() {
expect(function() {
getRandomNumber(undefined);
}).toThrowError("You must provide a number");
});

it('test getRandomNumber function for 0', function() {
expect(function() {
getRandomNumber(0);
}).toThrowError("The maximum value must be greater than 0 and less than 100.");
});

});
toThrowError matcher 接受 1 或 2 个参数
  • 1 参数 - 异常消息或异常类型
  • 2 参数 - 异常类型和异常消息

  • 基于异常类型检查的示例:
    function getRandomNumber(max) {
    throw new SyntaxError();
    }

    describe('toThrowError test case', function() {
    it('test getRandomNumber function for undefined', function() {
    expect(function() {
    getRandomNumber(undefined);
    }).toThrowError(SyntaxError);
    });
    });

    引用 link针对不同类型的异常。

    自定义错误消息

    下面提到的片段提供了使用自定义错误消息的示例。
    function getRandomNumber(max) {
    throw new ArgumentException();
    }

    function ArgumentException(message) {
    this.name = 'ArgumentException';
    this.message = message || '';
    }

    ArgumentException.prototype = new Error();
    ArgumentException.prototype.constructor = ArgumentException;

    describe('toThrowError test case', function() {
    it('test getRandomNumber function for undefined', function() {
    expect(function() {
    getRandomNumber(undefined);
    }).toThrowError(ArgumentException);
    });
    });

    关于unit-testing - 在 Jasmine 中使用 toThrowError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21221697/

    29 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com