Тестирование асинхронной функции, передаваемой в качестве реквизита от родителя к дочернему

у меня есть родительский компонент, где у меня есть handleClick, который передается как опора дочернему элементу.

// родитель.js

_handleClick = async (buttonName, id) => {
    if (buttonName === 'yes'){
        ... some logic
    }else{
        ... some logic
    }
}

<Child 
  handleClick = {(buttonName, id) => this._handleClick(buttonName, id)}
  />

так что прямо сейчас, как я могу вызвать _handleClick и запустить тестовые примеры. Как мне вызвать метод .

Я пробовал ниже, но не работал должным образом, так как это функция стрелки, и она ожидает два параметра.

//test.js

const wrapper = shallow(<parent />)
expect(wrapper.find('Child').length).toEqual(1)
wrapper.find('Child').prop('handleClick')
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
0
139
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Что ж, вам может понадобиться визуализировать родительский компонент с помощью метода монтирования, а не поверхностного. Это отобразит дочерний элемент, иначе будет отображаться только заполнитель. Затем вы можете захотеть инициировать фактическое событие щелчка, нажав кнопку или что-то еще, что запускает событие в дочернем компоненте.

поэтому с использованием мелкой я не могу проверить это. но в соответствии с примерами модульных тестов я могу вызвать мелко и проверить, что мой родительский компонент не

Learner 08.04.2019 18:24
Ответ принят как подходящий

wrapper.find('Child').prop('handleClick') — это функция, поэтому вы можете просто вызвать ее так:

wrapper.find('Child').prop('handleClick')( /* your args here */ );

Вот упрощенный рабочий пример:

import { shallow } from 'enzyme';
import * as React from 'react';

const Child = () => (<div></div>);

class Parent extends React.Component {
  constructor(...args) {
    super(...args);
    this.state = { val: 'initial' };
  }
  _handleClick = async (buttonName, id) => {
    // ... await something ...
    this.setState({ val: buttonName });
  }
  render() {
    return (<Child handleClick = {(buttonName, id) => this._handleClick(buttonName, id)} />);
  }
}

test('click handler', async () => {
  const wrapper = shallow(<Parent />);
  expect(wrapper.find('Child').length).toEqual(1);  // Success!
  await wrapper.find('Child').prop('handleClick')('the button name');  // <= call the handler
  expect(wrapper.state()).toEqual({ val: 'the button name' });  // Success!
});

.prop('handleClick')('newButton', 1). это то, как вы ожидаете передать аргументы?

Learner 09.04.2019 06:37

Да, это сошло бы 'newButton' за buttonName и 1 за id @DILEEPTHOMAS

Brian Adams 09.04.2019 07:07

Другие вопросы по теме