测试自定义事件本地响应

前端之家收集整理的这篇文章主要介绍了测试自定义事件本地响应前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在使用Jest和Enzyme进行测试.我测试正常事件没有问题,但我正在努力找到如何触发和测试来自Native Modules的组件中的事件的正确方法.在我的Jest设置中,我有以下内容
jest.mock('NativeEventEmitter',() => class MockNativeEventEmitter{
  addListener = () => jest.fn()
  removeListener = () => jest.fn()
  removeAllListeners = () => jest.fn()
});

但是,我不确定在测试中我如何实际调度事件.因此,例如,当用户摇动设备时,我有一个Native模块.在组件本身内,这样设置如下:

shakeEvents: ['shaken],deviceShakeEmitter: {},componentDidMount() {
  this.deviceShakeEmitter = new NativeEventEmitter(Shake)
  this.deviceShakeEmitter.addListener('shaken',this['shaken'])
 },

我知道对于内置事件我可以使用jest.simulate(‘press’)等,但对于自定义事件,我很难理解我如何在测试中处理这个问题.

我也想这样做,我设法在react-native Github repo中找到解决方案.他们使用普通的JS EventEmitter来模拟NativeEventEmitter:
const EventEmitter = require('EventEmitter');
const RCTDeviceEventEmitter = require('RCTDeviceEventEmitter');

/**
 * Mock the NativeEventEmitter as a normal JS EventEmitter.
 */
class NativeEventEmitter extends EventEmitter {
  constructor() {
    super(RCTDeviceEventEmitter.sharedSubscriber);
  }
}

现在您只需要设置模拟,并实例化此发射器以发送您喜欢的任何事件:

jest.mock('NativeEventEmitter');

const nativeEmitter = new NativeEventEmitter();
nativeEmitter.emit('SomeEventYouListenTo');

猜你在找的React相关文章