Lil*_*ilp 7 jestjs react-native
我正在使用Jest和Enzyme进行测试.我测试正常事件没有问题,但我正在努力找到如何触发和测试来自Native Modules的组件中的事件的正确方法.在我的Jest设置中,我有以下内容:
jest.mock('NativeEventEmitter', () => class MockNativeEventEmitter{
addListener = () => jest.fn()
removeListener = () => jest.fn()
removeAllListeners = () => jest.fn()
});
Run Code Online (Sandbox Code Playgroud)
但是,我不确定在测试中我如何实际调度事件.因此,例如,当用户摇动设备时,我有一个Native模块.在组件本身内,这样设置如下:
shakeEvents: ['shaken],
deviceShakeEmitter: {},
componentDidMount() {
this.deviceShakeEmitter = new NativeEventEmitter(Shake)
this.deviceShakeEmitter.addListener('shaken', this['shaken'])
},
Run Code Online (Sandbox Code Playgroud)
我知道对于内置事件我可以使用jest.simulate('press')等,但对于自定义事件,我很难理解我如何在测试中处理这个问题.
我也想这样做,我设法在本地的Github存储库中找到了解决方案。他们使用普通的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);
}
}
Run Code Online (Sandbox Code Playgroud)
现在,您只需要设置模拟,并实例化此发射器即可发出您喜欢的任何事件:
jest.mock('NativeEventEmitter');
const nativeEmitter = new NativeEventEmitter();
nativeEmitter.emit('SomeEventYouListenTo');
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2209 次 |
| 最近记录: |