为错误情况编写 Jasmine 测试用例,使其变为绿色
write Jasmine testcase for error cases so that it becomes green
我有一个函数returns最大数量的变体参数列表,如果参数超过5个就会报错:
if (params.length > 5) {
throw new Error('Too many arguments');
}
当我们在 Jasmine 中为单元测试编写测试用例时,我们如何期望这种错误的用例的值(以便测试用例成功 - 绿色),因为它不是功能?
这是我的测试代码:
const myLocalVariable1 = require('../src/get-bigest-number');
describe('CommonJS modules', () => {
it('should import whole module using module.exports = getBiggestNumber;', async () => {
const result = myLocalVariable1.getBiggestNumber(1, 3, 6, 5, 4, 7);
expect(result).toBe(new Error('Too many arguments'));
});
});
有一个 Jasmine 匹配器 toThrowError
可用于检查是否抛出错误。您可以选择将自定义错误 and/or 错误消息作为参数传递,以检查您是否收到预期的错误而不是其他错误。
在你的情况下,它将是:
expect(() => {
myLocalVariable1.getBiggestNumber(1, 3, 6, 5, 4, 7);
}).toThrowError('Too many arguments');
请注意,您必须将函数调用放在另一个函数中,否则函数的执行会触发错误并破坏测试。
但是,如果您的函数不接受任何参数,您只需将函数传递给 expect
:
expect(myFunctionWithNoArgs).toThrowError();
我觉得应该是这样的(不要赋值给result再assert result):
expect(myLocalVariable1.getBiggestNumber(1, 3, 6, 5, 4, 7)).toThrow();
你也可以用 JavaScript 的方法 try/catch:
it('should import whole module using module.exports = getBiggestNumber;', async () => {
try {
const result = myLocalVariable1.getBiggestNumber(1, 3, 6, 5, 4, 7);
} catch (e) {
expect(e.message).toBe('Too many arguments');
// Not sure about the below one but you can try it. We have to use .toEqual and not .toBe since it's a reference type
expect(e).toEqual(new Error('Too many arguments');
}
});
我有一个函数returns最大数量的变体参数列表,如果参数超过5个就会报错:
if (params.length > 5) {
throw new Error('Too many arguments');
}
当我们在 Jasmine 中为单元测试编写测试用例时,我们如何期望这种错误的用例的值(以便测试用例成功 - 绿色),因为它不是功能? 这是我的测试代码:
const myLocalVariable1 = require('../src/get-bigest-number');
describe('CommonJS modules', () => {
it('should import whole module using module.exports = getBiggestNumber;', async () => {
const result = myLocalVariable1.getBiggestNumber(1, 3, 6, 5, 4, 7);
expect(result).toBe(new Error('Too many arguments'));
});
});
有一个 Jasmine 匹配器 toThrowError
可用于检查是否抛出错误。您可以选择将自定义错误 and/or 错误消息作为参数传递,以检查您是否收到预期的错误而不是其他错误。
在你的情况下,它将是:
expect(() => {
myLocalVariable1.getBiggestNumber(1, 3, 6, 5, 4, 7);
}).toThrowError('Too many arguments');
请注意,您必须将函数调用放在另一个函数中,否则函数的执行会触发错误并破坏测试。
但是,如果您的函数不接受任何参数,您只需将函数传递给 expect
:
expect(myFunctionWithNoArgs).toThrowError();
我觉得应该是这样的(不要赋值给result再assert result):
expect(myLocalVariable1.getBiggestNumber(1, 3, 6, 5, 4, 7)).toThrow();
你也可以用 JavaScript 的方法 try/catch:
it('should import whole module using module.exports = getBiggestNumber;', async () => {
try {
const result = myLocalVariable1.getBiggestNumber(1, 3, 6, 5, 4, 7);
} catch (e) {
expect(e.message).toBe('Too many arguments');
// Not sure about the below one but you can try it. We have to use .toEqual and not .toBe since it's a reference type
expect(e).toEqual(new Error('Too many arguments');
}
});