Я пытаюсь смоделировать this.ref.current.value
как часть теста функции в моем компоненте React.
В настоящее время current
является нулевым, потому что я выполняю поверхностное монтирование моего компонента. Я пытаюсь найти способ смоделировать то, что current.value
возвращает для моего ref, чтобы я мог проверить другую часть функции, значение refs на самом деле не имеет значения для этого теста.
Фактическая функция:
copyDefinitionTarget = selectedInput => () => {
// get and select the input value
const copyText = this[`${selectedInput}`].current.value;
// copy to clipboard
navigator.clipboard.writeText(copyText);
};
Тестовый код:
it('calls navigator.clipboard appropriately to copy the text in copyDefinitionTarget', () => {
component = shallow(<Alert {...props} />);
component
.dive()
.find('Item')
.dive()
.find('Button')
.simulate('click');
expect(navigator.clipboard.writeText).toHaveBeenCalled();
});
Сбой теста:
TypeError: Cannot read property 'value' of null
50 | // get and select the input value
> 51 | const copyText = this[`${selectedInput}`].current.value;
Есть ли способ сделать это? Я забочусь о проверке того, что navigator.clipboard назывался не так, как он назывался.
Обновление, потому что я изменил свой код, чтобы использовать this.ref
вместо stringRefName
Фактическая функция:
copyDefinitionTarget = selectedInput => () => {
// get and select the input value
const copyText = selectedInput.current.value;
// copy to clipboard
navigator.clipboard.writeText(copyText);
};
Тестовый код:
it('calls navigator.clipboard appropriately to copy the text in copyDefinitionTarget', () => {
component = shallow(<Alert {...props} />);
instance = component.instance();
// we are clicking on the first Alert Item
// so mock that ref specifically
instance.firstNameRef = {
current: {
value: 'stuff'
}
};
component
.dive()
.find('Item')
.dive()
.find('Button')
.simulate('click');
expect(navigator.clipboard.writeText).toHaveBeenCalled();
});
Вызов функции:
<Item
inputRef={this.firstNameRef}
inputValue={`${realmName}`}
copyDefinitionTarget={this.copyDefinitionTarget(this.firstNameRef)}
/>