我在我的应用程序中使用Flux设计模式,我需要测试在组件发送的有效负载中给定存储上发出的应用程序动作。
使用调度程序,我发送如下所示的有效负载:
dispatcher.dispatch({
action: ACTION_NAME,
foo: 'bar',
emitOn: {
store: SomeStore, // extends EventEmitter
componentIds: ['Foo-Bar']
}
}
调度程序是这样实现的(不一定重要)
Dispatcher.register((payload) => {
Actions.call(payload);
return true;
});
当调度程序calls
执行某个操作时,对象Actions
将调用该操作,当该操作完成时,应在给定存储上调用emit
。
我的问题是如何在应用程序中对此进行测试?我想知道是否可以检查操作完成后是否调用了emit
。
要完成操作,此功能称为Actions.finish(payload)
如果您好奇finish
的样子,那么
finish(payload) {
payload.emitOn.map(emitter => {
var store = emitter.store;
emitter.componentIds.map(id => {
store.emit(id);
});
});
}
我当前的测试代码,但从未抛出错误:
jest.mock('./TestStore.js', () => {
return function() {
return {
emit: () => {
throw new Error('Test Error');
}
};
};
});
let ACTION = 'Test-Action';
let payload = {
action: ACTION,
emitOn: [{
store: TestStore, // The store to emit on
componentIds: ['Test-Id']
}]
};
expect(() => {
AppActions.finish(payload);
}).toThrow(Error);
答案 0 :(得分:0)
对于任何关心如何测试函数是否调用的人,您都可以使用gitlab.rb
监视函数
我更改了测试代码(更清洁,并且是进行此类测试的正确方法)
jest.spyOn