Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/469.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript jest:在执行console.error的实用程序函数中测试catch case?_Javascript_Jestjs - Fatal编程技术网

Javascript jest:在执行console.error的实用程序函数中测试catch case?

Javascript jest:在执行console.error的实用程序函数中测试catch case?,javascript,jestjs,Javascript,Jestjs,不确定这是否可以测试(可能需要重新考虑功能) 我有这个实用功能: const getProp = (propKey) => { const env = getCurrentEnvironment(); let prop = ''; try { prop = constants.PROPS_TABLE[env][propKey]; } catch (err) { const errorMsg = `Property not found for envi

不确定这是否可以测试(可能需要重新考虑功能)

我有这个实用功能:

const getProp = (propKey) => {
  const env = getCurrentEnvironment();
  let prop = '';
  try {
      prop = constants.PROPS_TABLE[env][propKey];
  } catch (err) {
      const errorMsg = `Property not found for environment ${env} using key ${propKey}`;
      console.error(errorMsg);
  }
  return prop === undefined ? '' : prop;
};
我对快乐路径进行了测试,但我想证明错误路径将调用console.error,并显示预期的错误消息


有没有办法在不改变该功能设计的情况下实现这一点

首先,它直接对控制台进行I/O时产生了副作用这一事实并不伟大,但有时这就是生活

你可以:

  • 保留对旧
    控制台的引用。error
    value-
    var error=console.error
  • console.error
    -
    console.error=jest.fn()
  • 断言它被调用为
    expect(console.error.mock.calls[0][0]).toBe(“
    Property not found for environment…”),并带有确切的参数
  • 控制台。错误
    在每次
总的来说,这就像:

var error = console.error;

afterEach(() => {
  console.error = error; // revert the spy
});

test('your fn', () => {
  console.error = jest.fn();
  setCurrentEnvironment('test'); // or whatever getCurrentEnvironment accesses
  expect(getProp('non existing')).toBe('');
  expect(console.error.mocks.calls[0][0]).toBe(
    'Property not found for environment test using key non existing'
  );
});

回答得很好。输入错误:
console.error.mocks.calls[0][0]
应该是
console.error.mock.calls[0][0]
(如果不更改至少6个字符,我无法建议进行编辑,这只是一个1个字符的输入错误)。好吧,我正在尝试此操作,并得到一个类型错误:无法读取未定义的属性“0”。我只是想更改我的函数,以抛出异常,而不是登录到控制台。我相信这一点,因为我认为再多做一点工作,我就可以让它工作,但不值得花时间。@Manique这个错误是因为我引用的打字错误。这种方法很有效,在测试中它只需要是
console.error.mock.calls[0][0]
。不,我包括了您推荐的修复程序。还是错误。