为错误情况编写 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');
    }
  });