У меня есть этот epi c, нужна помощь для тестирования, epi c вызывает метод asyn c (от оператора), и он использует оператор задержки
export const getAll$ = (
action$: any,
state: { value: TStore },
{ stock, Error }: TDependencies
) => {
return action$.pipe(
ofType(getAll.toString()),
map(({ meta: { failures} }) => ({
failures,
})),
switchMap(({ failures }) => {
return merge(
of(getAllStart()),
// call api service stock.getAll, this is async
from(stock.getAll()).pipe(
// wait a 1 second, not matter if stock.getAll finish early
delay(OPERATION_DELAY),
switchMap((response: TGetAllResponse) => {
if(response instanceof Error) {
return throwError(response);
}
return of(
getAllSuccess()
);
}),
catchError((error) => {
return failures === 0 ?
of(getAllFailure({ error }))
:
of(getAll({
failures: failures + 1,
})).pipe(
delay(FAILURE_RETRY_TIME),
);
}),
// "cancel" this epic if getAllAbort action is emitted
takeUntil(
action$.ofType(
getAllAbort.toString()
)
)
)
)
})
)
};
Вот мой test
import { ActionsObservable } from 'redux-observable';
// some mocking
const state = { value: {} };
const dependencies = {
api: {},
stock: {
getAll() {
return [];
}
},
Error: class Error {},
};
describe('stock epic', () => {
it('should return all products', (done) => {
// start epic getAll$
getAll$(ActionsObservable.of(getAll()), state, dependencies).subscribe((action) => {
console.log(action); // { type: 'STOCK/GET_ALL_START' }
done();
});
});
});
Если вы видите console.log(action);
только возвращает { type: 'STOCK/GET_ALL_START' }
Если я использую .toArray()
test никогда не заканчивается *
Lorem Ipsum Dolor Sit Amet, Concetetur Adipiscing Elit. Проин c Блэндит Лео. Phasellus non turpis eu mi finibus pharetra ne c Vel ante. Phasellus non feugiat lorem, ne c ultricies quam. В porttitor bibendum facilisis. Совершено c Euismod Imperdiet Tincidunt. Mauris enim ante, suscipit iaculis mi et, convallis fermentum ante. Vestibulum eget purus pharetra, finibus Velit in, Porta metus. Vivamus interdum lobortis elit, dignissim tempor sem. Namtricies, odio sed tempus convallis, nibh lectus maximus tortor, non sollicitudin enim ex sit amet justo. Namvel lacus feugiat lorem venenatis interdum.