У меня есть следующая функция, которую я хотел бы протестировать. Как видите, это функция-генератор с некоторыми событиями Redux Saga. Согласно отчету Jest, я все еще не могу пройти тест для строк, которые я указываю стрелкой вправо (->) в начале соответствующей строки кода.
export function* createPublisher(properties: TokboxScreenshare.PublisherProperties) {
let publisherChannel;
let publisher;
const container = document.createElement('div');
container.setAttribute('class', 'screen-preview');
const errorChannel = eventChannel(send => {
publisher = window.OT.initPublisher(container, properties, err => send(err || END));
return () => {};
});
yield call(handleChannelTimeout, errorChannel);
publisherChannel = eventChannel(send => {
publisher.on('mediaStopped', () => {
// The user clicked stop.
--> send(put(Actions.screenshareAction(Actions.ScreenshareActionType.StopShare)));
});
publisher.on('streamDestroyed', () => {
--> send(put(Actions.screenshareAction(Actions.ScreenshareActionType.StopShare)));
});
publisher.on('streamCreated', event => {
--> send(call(onStreamCreated, event));
});
return () => {
--> publisher.off('mediaStopped');
--> publisher.off('streamDestroyed');
--> publisher.off('streamCreated');
};
});
--> yield spawn(function*() {
--> yield takeEvery(publisherChannel, function*(message: any) {
--> yield message;
});
});
yield call(publishToSession, publisher);
return { publisher, publisherChannel };
}
и мой тест на данный момент выглядит следующим образом:
it('Creates the publisher', () => {
const properties: TokboxScreenshare.PublisherProperties = {
videoSource: 'screen',
maxResolution: {
width: 1920,
height: 1080
},
mirror: false,
fitMode: 'contain',
publishAudio: false
};
const event = {
stream: {
id: 'streamId'
}
};
let callback = () => {};
window.OT = {
initPublisher: jest.fn((_1, _2) => {
return {
on: _ => {},
off: () => {},
send: jest.fn()
};
})
};
const publisher = window.OT.initPublisher((_container, _properties, func) => {
func();
return {
on: (name, cb) => {
if (name === 'mediaStopped' || name === 'streamDestroyed' || name === 'streamCreated') {
callback = cb;
}
},
off: () => {},
send: jest.fn()
};
});
callback();
console.log('publisher ->>> ', publisher);
const channel = eventChannel(send => {
publisher.on('mediaStopped', () => {
send('hello world');
});
publisher.on('streamDestroyed', () => {
send('hello world');
});
publisher.on('streamCreated', () => {
send('hello world');
});
return () => {
publisher.off('mediaStopped');
publisher.off('streamDestroyed');
publisher.off('streamCreated');
};
});
return expectSaga(Sharing.createPublisher, properties)
.provide([
[matchers.call.fn(Sharing.publishToSession), null],
[matchers.call.fn(Sharing.onStreamCreated), event]
])
.dispatch(Actions.screenshareAction(Actions.ScreenshareActionType.StopShare))
.dispatch({ type: 'TAKE_EVERY', payload: channel })
.silentRun();
});
Есть какие-нибудь подсказки или предложения, что я здесь делаю не так?