不确定是否可以测试(可能需要重新考虑功能)。
我有这个实用程序功能:
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并显示预期的错误消息。
在不更改此功能设计的情况下,有什么方法可以做到这一点?
答案 0 :(得分:1)
首先,在I / O中直接对控制台产生副作用的事实并不好-有时候这就是生活。
您可以:
console.error
值-var error = console.error
console.error
-console.error = jest.fn()
上设置间谍expect(console.error.mock.calls[0][0]).toBe('
找不到针对环境....')`的属性console.error
恢复为afterEach
中的原始值总的来说,就像是这样:
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'
);
});