Jest TypeScript mocking store.dispatch приводит к 0 выполненным вызовам

проблема

Я новичок в тестировании. Я на самом деле просмотрел все документы на шутку, и они не охватывают конкретные случаи машинописи, и я исследую, что я могу. Я пытаюсь написать простой тест, чтобы увидеть, сработал ли мой код.

jest.mock('moment', () => {
    return {
        toLocaleString: jest.fn().mockReturnValue('test')
    }
});
jest.mock('@/store/index')
jest.mock('vuex'), () => {
    return {
        store: {
            dispatch: jest.fn()
        }
    }
};
jest.mock('@/services/JanusRequestService')
jest.mock('../../src/axiosConfig')
jest.mock('../../src/router', () => {
    return {
        test: jest.fn()
    }
})
jest.mock('../../src/interfaces/Request')

describe('copyRequestToClipboard', () => {
    let RequestMock = {
        Id: Ƈ',
        createdBy: 'string',
        CreatedOnUtc: new Date(),
        modifiedOn: 'string',
        version: 2,
        workflowId: 'string',
        Status: 'string'
    }
    //@ts-ignore
    let writeTextMock = window.__defineGetter__('navigator', function () {
        return {
            clipboard: {
                writeText: jest.fn(x => x)
            }
        }
    })
    it('should call navigator.clipboard.writeText() correctly', () => {
        globalMixins.methods.copyRequestIdToClipboard(RequestMock)
        expect(writeTextMock).toHaveBeenCalled
    });

    it('should call triggerSnackBar correctly', () => {
        globalMixins.methods.triggerSnackBar = jest.fn()
        globalMixins.methods.copyRequestIdToClipboard(RequestMock)
        expect(globalMixins.methods.triggerSnackBar).toHaveBeenCalled
        expect(globalMixins.methods.triggerSnackBar).toHaveBeenCalledWith('Copied to Clipboard!', '')
    });
});
describe('triggerSnackBar', () => {
    let RequestMock: IRequest
    function constructData() {
        return {
            Id: Ƈ',
            createdBy: 'string',
            CreatedOnUtc: new Date(),
            modifiedOn: 'string',
            version: 2,
            workflowId: 'string',
            Status: 'string'
        }
    }
    beforeEach(() => {
        RequestMock = constructData()
        let dispatchMock = store.dispatch = jest.fn();
    })

    it('should successfully call on dispatch 3 times', () => {
        globalMixins.methods.triggerSnackBar('test', 'green')
        expect(store.dispatch).toBeCalledTimes(3)
    });
    it('should have called with correct params', () => {
        globalMixins.methods.triggerSnackBar('test', 'green')
        expect(store.dispatch).toBeCalledWith({ text: 'test' })
    })
});

Я получаю ошибку введите описание изображения здесь

Я пытаюсь понять, что я делаю не так. Я также делаю заметки о том, как мне нужно тестировать и какие шаблоны использовать.

Всего 1 ответ


Я нашел ответ ..

describe('triggerSnackBar', () => {
    let spy: any
    beforeEach(() => {
        spy = jest.spyOn(store, 'dispatch');
    })
    afterEach(() => {
        jest.clearAllMocks()
    })
    it('should successfully call on dispatch 3 times', () => {
        globalMixins.methods.triggerSnackBar('test', 'green')
        expect(store.dispatch).toBeCalledTimes(3)
    });
    it('should have called with correct params', () => {
        globalMixins.methods.triggerSnackBar('test', 'green')
        expect(store.dispatch).nthCalledWith(1, 'triggerSnackbarMessage', { text: 'test' })
        expect(store.dispatch).nthCalledWith(2, 'triggerSnackbarColor', { color: 'green' })
        expect(store.dispatch).nthCalledWith(3, 'triggerSnackbar')
    })
});

Есть идеи?

10000