首页 > 解决方案 > 如何使用酶测试“事件”?

问题描述

我有一个函数,它是这样的:

  posXEvent = (e) => {
    e.persist();
    const interval = 20;
    const diff = this.textInput.offsetWidth / total_interval_count;

    let posX = e.pageX - this.textInput.offsetLeft;
     //Do something based on posX
  };

我有一个组件,onclick,上面的函数被称为<div onClick={this.posXEvent} ref={this.textInput} />

现在我想使用酶为上述功能创建一个测试,但是有没有办法通过'e属性或传递假值来测试?

标签: reactjsenzyme

解决方案


是的,您应该使用 jest 的jest.spyOn(object, methodName). 对于对象,传递包装器的实例。对于方法名称,您必须传递类方法的名称。

const wrapper = mount(<MyComponent />);
const eventSpy = jest.spyOn(wrapper.instance(), "posXEvent");

const eventData = { pageX: 3 };

yourElement.simulate('click', eventData);
expect(eventSpy.mock.calls).to.have.length(1);

推荐阅读