Jestjs如何测试另一个函数内部被调用的函数

对于测试,我使用jest和react-test-renderer。测试应该很简单,但是我很难找到合适的例子。我试图做这样的事情(通常我将功能保存在单独的文件中):

utils.js

export const childFunction = () => 'something';    

const parentFunction = () => childFunction();

export default parentFunction;

utils.test.js

import parentFunction from './utils.js';

it('childFunction should be called', () => {

const childFunction = jest.fn();

parentFunction();

expect(childFunction).toBeCalled();

})

片段 const childFunction = jest.fn();

绝对行不通。调用时,parentFunction的主体仅关心其自身的作用域。但是,如果我导入childFunction并执行

jest.mock(childFunction) ,它也将不起作用,因为jest.mock需要一个字符串,一个模块的url,而不是函数本身。

上面的示例不起作用,我正在寻找替代方法。但是,在使用ShallowRenderer渲染组件后,此方法有效。我想通过嵌套在另一个函数中的函数来实现类似的行为。

class Component extends React.Component {

componentDidMount() {parentFunction()}

render() {...}

}

const renderer = new ShallowRenderer();

describe("testing parentFunction", () => {

renderer.render(<Component/>);

it("parentFunction should be called", () => {

expect(parentFunction).toBeCalled();

});

});

回答:

如果没有将函数作为对象方法调用,则无法监视函数调用。

如本答案所述,由于ES模块的工作方式,只有从某个模块导出并在另一个模块中使用该功能时,才可能监视或模拟该功能。这样,就可以在模块*对象上对其进行监视,或使用对其进行模拟jest.mock

如果不是这种情况,则应进行间接测试:

expect(childFunction()).toBe('something');

expect(parentFunction()).toBe('something');

以上是 Jestjs如何测试另一个函数内部被调用的函数 的全部内容, 来源链接: utcz.com/qa/433201.html

回到顶部