Я пытаюсь использовать proxyquire
, чтобы заменить вызов метода в модуле, который я тестирую, но он вызывает метод, несмотря на то, что у меня установлен заглушка. Что я делаю не так?proxyquire not stubbing метод call
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