我试图用proxyquire
来替换我正在测试的模块中的一个方法调用,但是它调用了方法,尽管事实上我有存根设置。我究竟做错了什么?proxyquire不是存根方法调用
formsReducer.test.js:
import { expect } from 'chai';
import * as actions from '../actions/formsActions';
import * as types from '../constants/actionTypes';
import proxyquire from 'proxyquire';
describe('Forms Reducer',() => {
describe('types.UPDATE_PRODUCT',() => {
it('should get new form blueprints when the product changes',() => {
//arrange
const initialState = {
blueprints: [
{
id: 1,
categoryId: 1,
identifier: null,
name: "Investment Policy Statement",
sortGroup: 1,
wetSignRequired: false
}
]
};
const testBlueprints = [{ id: 999, categoryId: 1, name: "Form Blueprint Loaded From Product ID 1", sortGroup: 1, wetSignRequired: false }];
//use proxyquire to stub call to formsHelper.getFormsByProductId
let formsReducer = proxyquire.noCallThru().load('./formsReducer', {
formsHelper: {
getFormsByProductId: id => { return testBlueprints }
}
}).default;
const action = {
type: types.UPDATE_PRODUCT,
product: {
id: 1,
accountTypeId: 1,
officeRangeId: 1,
additionalInfo: "",
enabled: true
},
};
//act
const newState = formsReducer(initialState, action);
//assert
expect(newState.blueprints).to.be.an('array');
expect(newState.blueprints).to.equal(testBlueprints);
});
});
});
formsReducer.js:
import * as types from '../constants/actionTypes';
import objectAssign from 'object-assign';
import initialState from './initialState';
import formsHelper from '../utils/FormsHelper';
export default function formsReducer(state = initialState.forms, action) {
switch (action.type) {
case types.UPDATE_PRODUCT: {
let formBlueprints = formsHelper.getFormsByProductId(action.product.id);
formBlueprints = formsHelper.addOrRemoveMnDisclosure(formBlueprints, action.stateOfResidence.id);
return objectAssign({}, state, {blueprints: formBlueprints, instances: []});
}
}
formsHelper.getFormsByProductId
没有返回testBlueprints
因为它应该好像它是通过适当的存根proxyquire
。我究竟做错了什么?
我有一种感觉,这是因为'.default'当你加载它。你用babel来测试你的测试代码吗?你可以编辑你的问题,包括标题部分与您的需求/进口?另外,您可以尝试'./node_modules/.bin/mocha --compilers js:babel-core/register'作为您的npm测试脚本。 –
嗨,马里奥,我使用'.default',因为如果我不这样做,'.load('./ formsReducer')'返回下面的内容(这不是一个函数 - 我用'console.log'来得到这个) :'{default:[Function:formsReducer]}' - 当我试图在测试中使用这个函数时,我得到一个错误。我编辑了我的问题,按照您的要求包含需求和导入 - 看看是否有助于您进一步诊断问题。 – Tylerlee12