У меня есть класс с именем SelectedValues, как показано ниже, который имеет глобальную переменную "this.others"
export default class SelectedValues extends React.Component {
/* istanbul ignore next */
constructor(props) {
super(props);
this.renderOption = this.renderOption.bind(this);
this.deselectOption = this.deselectOption.bind(this);
this.others= [];
this.state = {
typedText: '',
index: null,
typedContext: '',
};
}
deselectOption(event, option, index){
const selectedOptions = _.clone(this.props.value);
let selectedOptionsValue = _.split(selectedOptions.value, ';');
selectedOptionsValue.splice(index, 1);
console.info(this.others);
let othersIndex = this.others[index].OtherIndex;
let typedUpdateContext = '';
if (othersIndex === 0){
let temp = this.others.find(item => item.OtherIndex === 1);
typedUpdateContext = temp? temp.value : '';
}
_.remove(this.others, { 'key': option + index });
}
render(){
return(...);
}
}
Код работает нормально, но когда я запустил тестовый файл, используя npm run test
для вышеуказанного метода «deselectOption», я получаю сообщение об ошибке, как показано ниже.
TypeError: Cannot read property 'OtherIndex' of undefined
Позже я обнаружил, что проблема возникает из-за this.others (глобальная переменная), и это пустой массив. Итак, как издеваться над «this.others», прежде чем я вызову метод deselectOption в тестовом файле.
Я новичок в написании тестов для модульных тестов. Пожалуйста, помогите мне решить эту ошибку.
Заранее спасибо.
@slideshowp2 Я использую мокко для тестирования. Это вы спрашиваете?
@slideshowp2 спасибо, ваш ответ полезен, я могу поиздеваться над экземпляром.
Спасибо @slideshowp2 за предложение, я могу смоделировать данные в своем тестовом файле после получения экземпляра компонента.
Итак, other - это переменная конструктора. Чтобы издеваться над этой переменной, я выполнил описанный ниже процесс, и это сработало для меня.
const wrapper = shallow(<SelectedValues value = {input} onChange = {onChangeSpy} />);
const instance = wrapper.instance();
//Below i am mocking "others" variable
instance['others'] = [
{
'key':'Add 10 statements0',
'value':'Add 10 statements',
'OtherIndex': null
},
{
'key':'Verify bank statements1',
'value':'Verify bank statements',
'OtherIndex': null
},
{
'key':'Other2',
'value':'loan',
'OtherIndex': 1
}
];
Какую библиотеку для тестирования реакции вы используете? Как правило, когда вы получаете экземпляр компонента, вы можете присвоить фиктивное значение свойству
others
.