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时产生了副作用这一事实并不伟大,但有时这就是生活 你可以:
- 保留对旧
value-控制台的引用。error
var error=console.error
- 在
-console.error
console.error=jest.fn()
- 断言它被调用为
Property not found for environment…”),并带有确切的参数expect(console.error.mock.calls[0][0]).toBe(“
- 将
在每次控制台。错误
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]
。不,我包括了您推荐的修复程序。还是错误。