2016-09-14 57 views
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方法内的响应。而不是检索测试中的数据集,我得到了初始值:[]。

有人有想法吗?

谢谢 文森特

+0

'_resultDeOuf'是一个数组,所以你的意思是'推''result'到'_resultDeOuf'而不是分配给'result'这是一个对象吗? – grgmo

+0

实际上这个模拟不仅返回数组 –

回答

1

我通过窗口对象内部设置_resultDeOuf固定它。这是丑陋的,但它的工作