模拟文件中的间谍功能

问题描述 投票:0回答:1

我在StateService文件夹中有一个名为__mocks__的模拟文件

export default {
    goTo: jest.fn(),
    goToNewTab: jest.fn(),
    goToPreviousAppState: jest.fn(),
    reload: jest.fn()
}

在测试中,我想监视goToNewTab并检查是否已调用该函数。我现在正在做的就是将模拟文件导入到我的测试中,然后在我的测试本身中,我这样称呼“期望”:

expect(StateService.goToNewTab).toHaveBeenCalled();

但是期望值没有返回正值。

javascript unit-testing mocking jestjs
1个回答
1
投票

假设您在services/StateService.js中有一个文件(为简单起见,我仅定义goToNewTab服务):

function goToNewTab() {
    // Your logic here.
}

export default {
    goToNewTab
};

然后,您在services/__mocks__/StateService.js中创建此模块的模型:

export default {
    goToNewTab: jest.fn()
};

现在,您正在测试一个调用goToNewTab服务的模块。假设它放在utils/navigation.js

import StateService from '../services/StateService';

export default function() {
    StateService.goToNewTab();
}

使用模拟服务的此类模块的测试如下:

import StateService from '../services/StateService';
import navigation from './navigation';

jest.mock('../services/StateService');

it('Should mock call', () => {
    navigation();

    expect(StateService.goToNewTab).toHaveBeenCalled();
});

请注意,如果在测试中需要StateService模块,则需要按照jest.mock中的说明显式调用模块的documentation

© www.soinside.com 2019 - 2024. All rights reserved.