开玩笑手动模拟不返回正确的值



升级到15.1.1 (react是15.3.1)后,我有一个jest手动mock的问题

当我在测试中设置模拟结果时,当调用模拟方法时,实际结果不是所期望的结果,而是创建变量时的初始结果。

在我升级react和jest之前,它工作得很好。

这是我的模拟:

'use strict';
const psMock = jest.genMockFromModule('../ProcessService');
import clone from 'lodash/clone'
var _resultDeOuf = [];
function __setMockResult(result) {
    _resultDeOuf = result;
}
psMock.getRelatedProcessesByGroupingId = jest.fn(() => {
    return {
        then: (callback) => callback(_resultDeOuf);
    }
});
psMock.__setMockResult = __setMockResult;
export default psMock`

这是我的测试:

jest.unmock('../SuperProcessRow');
jest.unmock('../ProcessRow');
import React from "react";
import ReactDom from "react-dom";
import TestUtils from "react-addons-test-utils";
import processService from 'ProcessService'
import SuperProcessRow from '../SuperProcessRow'
const defaultSuperProcess = {
    "processId": "97816",
    "executionId": null,
    "cancelExecutionId": null
}
describe('SuperProcessRow', () => {
    beforeEach(() => {
        processService.getRelatedProcessesByGroupingId.mockClear()
    });
    it('load sub processes on super process click ', () => {
        let responseSubProcesses = {
            processes : subProcesses,
            totalCount : 5
        };
        processService.__setMockResult(responseSubProcesses);
        let superProcessRow = TestUtils.renderIntoDocument(
        <table><SuperProcessRow process={defaultSuperProcess}/></table>);
        superProcessRow = ReactDom.findDOMNode(superProcessRow);
        let icon = superProcessRow.querySelector('i');
        TestUtils.Simulate.click(icon);
        expect(processService.getRelatedProcessesByGroupingId.mock.calls.length).toEqual(1);
    })
});

在实际的生产代码中,我调用了getRelatedProcessGroupingId,并在.then方法中处理响应。而不是在测试中检索数据集,我得到了初始值:[].

有人有主意吗?

谢谢文森特

我通过在窗口对象中设置_resultDeOuf来修复它。虽然很丑,但是很好用

最新更新