gpt4 book ai didi

javascript - 使用 Jest 监视默认导出函数

转载 作者:行者123 更新时间:2023-12-02 02:40:22 25 4
gpt4 key购买 nike

我需要测试我正在测试的 addCampus 方法在抛出错误时是否调用了 logger() 函数。我对开 Jest 还很陌生,所以我可能会遗漏一些简单的东西

记录器.js

function logger(level, message) {
//logs message to console
//has no explicit return
}

export default logger;

AddCampusList.jsx

import logger from '../../Logger';
addCampus = campus => {
axios
.post('/api/campuses/', {
name: campus.campusName,
abbreviation: campus.campusAbbreviation,
})
.then(response => {
const { campuses } = this.state;
campuses.push(response.data);
this.setState({ campuses });
})
.catch(error => {
this.props.displayError(error);
logger('ERROR', error);
});
};

AddCampusList.test.js

import logger from '../../../src/Logger.js'
...
it('calls displayError() with error', async () => {
getSpy = jest.spyOn(axios, 'get').mockRejectedValueOnce(error);
const logger = jest.fn();
const loggerSpy = jest.spyOn(logger, 'default');
wrapper = await shallow(<AddCampusList
displayError={displayError}
onSelectCampus={onSelectCampus}
selectedCampus={selectedCampus}
isMobileViewport={isMobileViewport}
/>);

expect(displayError).toHaveBeenCalledWith(error);
expect(loggerSpy).toHaveBeenCalled();
});

expect(displayError) 正常工作,但 expect(loggerSpy) 不正常。我尝试了几种不同的方法,但这是我最常遇到的错误

 Cannot spy the default property because it is not a function; undefined given instead
> 105 | const loggerSpy = jest.spyOn(logger, 'default');

最佳答案

logger 包已经默认导入,因此它不应该有 default 属性。

监视它的正确方法是:

import * as loggerMod from '../../../src/Logger'
...
const loggerSpy = jest.spyOn(loggerMod, 'default');

这可能行不通,因为 ES 模块是只读的,是否强制执行取决于设置。

更正确的方法是在模块 mock 中这样做:

import logger from '../../../src/Logger'

jest.mock('../../../src/Logger.js', () => {
const loggerMod = jest.requireActual('../../../src/Logger');

return {
...loggerMod,
__esModule: true,
default: jest.fn(loggerMod.default)
};
});

...

expect(logger).toHaveBeenCalled();

大多数情况下,模拟一个可能产生不良副作用的函数比监视它更可取,这要简单得多,尤其是对于仅具有默认导出的模块:

jest.mock('../../../src/Logger', () => jest.fn());

关于javascript - 使用 Jest 监视默认导出函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63726626/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com