gpt4 book ai didi

javascript - Jasmine - 如何测试错误?

转载 作者:搜寻专家 更新时间:2023-11-01 05:04:51 25 4
gpt4 key购买 nike

情况:

大家好。我正在学习 jasmine 来测试我的 Angular 应用程序。

我已经创建了一个将两个数字相乘的基本函数。如果给定的参数不是数字,函数将抛出错误。

然后我做了两个非常基本的测试。

首先检查函数是否正确地乘以数字。第二个检查如果字符串作为参数给出,函数是否正确抛出错误。

第一个测试通过,第二个不通过。我不明白为什么。

代码:

函数:

function Multiply( num1, num2 )
{

var result;

if (isNaN(num1) || isNaN(num2))
{
throw new Error("not a number");
}
else
{
result = num1 * num2;

return result;
}

}

规范:

describe('The function', function () 
{
it('properly multiply two numbers', function ()
{
result = Multiply(10, 5);
expect(result).toEqual(50);
});

it('throw an error if a parameter is not a number', function ()
{
result = Multiply(10, 'aaaa');

expect(result).toThrow(new Error("not a number"));

});

});

输出:

2 specs, 1 failure
Spec List | Failures
The function throw an error if a parameter is not a number
Error: not a number
Error: not a number
at Multiply (http://localhost/jasmine_test/src/app.js:8:9)

如果我没有正确理解 Jasmine。两个测试都应该通过,因为在第二种情况下,函数会按照我们的预期抛出错误。

问题:

如何测试函数是否正确抛出错误?



编辑:

我正在尝试这个新代码,但仍然无法正常工作:

describe('The function', function () 
{

it('throw an error if a parameter is not a number', function ()
{

expect(function() { Multiply(10, 'aaaa') }).toThrowError(new Error("not a number"));

});

});

输出:

2 specs, 1 failure
Spec List | Failures
The function throw an error if a parameter is not a number
Error: Expected is not an Error, string, or RegExp.

最佳答案

如果我理解正确,您需要将一个函数传递给 expect(...) 调用。

你在这里的代码:

expect(result).toThrow(new Error("not a number"));

正在检查 Multiply 的结果,当它工作时它很好,但就像我说的 .toThrow() 需要一个函数,我会改用匿名函数,见下文:

expect( function(){ Multiply(10, 'aaaa'); } ).toThrow(new Error("not a number"));

编辑:快速搜索并 this博文对我想说的内容进行了非常详细的解释。

关于javascript - Jasmine - 如何测试错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27875911/

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