我正在尝试测试发生状态转换时是否调用了承诺。
我遵循了官方 xState 教程中概述的方法,但出现以下错误
Timeout - Async callback was not invoked within the 5000ms timeout specified by jest.setTimeout.Timeout
这是我的状态机,它所做的只是在您从初始状态转换时调用一个承诺。
export const statsMachine = Machine(
{
id: 'stats',
initial: 'incomplete',
states: {
incomplete: {
on: {
MODAL_OPENED: 'loading',
},
},
loading: {
invoke: {
id: 'setRatioDefaultsInFirebase',
src: (context, event) => setStatDefaults(event.payload && event.payload.userId),
onDone: {
target: 'modal',
},
onError: {
target: 'incomplete',
},
},
},
modal: {...}
}
})
这是我的测试。我想模拟我的 api 调用,而不是像教程中那样触发真正的 api 调用。我用笑话来模拟副作用。我想断言模拟的副作用被调用了。但我得到了上面列出的错误。
jest.mock('../statsAPI');
test('stats should start off with minimum ratios', done => {
setStatDefaults.mockResolvedValueOnce();
const statsBoxService = interpret(statsMachine)
.onTransition(state => {
if (state.matches({ selected: 'modal' })) {
expect(setStatDefaults).toHaveBeenCalled();
done();
}
})
.start();
statsBoxService.send('MODAL_OPENED');
});
我必须更改什么才能断言我的模拟副作用在机器转换时被调用?