Jest ручной макет не возвращает правильное значение

У меня есть проблема с насмешкой вручную после обновления до 15.1.1 (реагирует на 15.3.1)

Когда я устанавливаю фиктивный результат внутри теста, когда вызываемый метод вызывается, фактический результат не тот, который ожидался, а первоначальный при создании переменной.

Это работало очень хорошо, пока я не отреагировал и пошутил.

Вот мой макет:

'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. И вместо того, чтобы извлекать данные, установленные в тесте, я получил начальное значение: [].

у кого-нибудь есть идея?

Спасибо Винсент

1 ответ

Я исправил это, установив _resultDeOuf внутри объекта окна. Это некрасиво но работает

Другие вопросы по тегам