Имитация настраиваемого события с помощью jest и enzyme

class AgGridWrapper extends React.Component {
  render() {
    return <AgGridReact onCellClicked={this.onCellClicked.this(bind)}
  }
  onCellClicked= (event) = > {
    event.setDataValue(newValue);
  }
}

У меня есть компонент-оболочка AgGridWrapper вокруг AgGridReact (AgGridReact - это модуль узла, который помогает создавать сетки HTML). В этом примере, когда я нажимаю на любую ячейку в AgGrid, это изменяет значение ячейки.

Я хочу протестировать это событие onCellClicked. поэтому я сделал следующее.

const wrapper= shallow(<AgGridWrapper />);
const agGridReact = wrapper.find(AgGridReact);

const eventObject={};
agGridReact.simulate('cellClicked',eventObect);

Я намерен имитировать событие cellClicked и проверить, изменилось ли значение ячейки или нет. Но здесь у меня нет доступа к методу setDataValue () agGridReact. поэтому я не могу издеваться над этим eventObject.

Я застрял здесь на пару дней. и у меня сложилось впечатление, что технически невозможно протестировать эту функциональность, потому что setDataValue недоступен для нас.

Любые предложения по этому поводу ??

2
0
3 343
1

Ответы 1

Поскольку simulate не делает ничего, кроме вызова функции, которая находится в on{propName}. По какой-то причине это работает только для стандартных событий, но, в конце концов, ничем не отличается от того, чтобы вызвать его самостоятельно:

const eventObject = {setDataValue: jest.fn()}
gGridReact.prop('cellClicked')(eventObect);
expect(eventObject).toHaveBeenCalled()

Метод setDataValue внутренне выполняет некоторые манипуляции с DOM, и я действительно хотел бы проверить, правильно ли выполняется манипуляция или нет. Ты хоть представляешь, как я могу это сделать?

Roopak PutheVeettil 12.04.2018 10:37

Вы не можете это проверить, а также почему вы хотите проверить это здесь. Я бы предположил, что компонент AgGridReact имеет свои собственные модульные тесты, поэтому единственное, что вы должны здесь проверить, это то, что события были добавлены правильно. Все остальное должно быть лучше протестировано до конца.

Andreas Köberle 12.04.2018 10:40

Make Sense. Спасибо за помощь.

Roopak PutheVeettil 12.04.2018 11:15

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