jest tests for @ngrx/effect is failing with timeout in angular

25 views Asked by At

I am writing jest test cases for simple @ngrx effect

the action

export const createMultiHost = createAction(
    `${actor} Create MultiHost Source`,
    props<{
        source: MultiHostSource;
    }>()
);
export const createMultiHostSuccess = createAction(
    `${actor} Create MultiHost Source Success`,
    props<{ createdSource: MultiHostSource }>()
);

effect:

create$ = createEffect(() =>

    this.actions$.pipe(
        ofType(createMultiHost),
        switchMap(({ source }) => {
            return this.multiHostApiService.create(MultiHostUtil.transformMultiHostModelToRequest(source)).pipe(
                map(successResponse => {
                    return createMultiHostSuccess({ createdSource: successResponse });
                }),
                catchError(error => of(createMultiHostFailure({ errorResponse: error })))
            );
        })
    )
);

effect jest test (effect.spec.ts)

describe('MultiHostEffects', () => {
let effects: MultiHostEffects;
let actions: Subject<any>;
let multiHostService: MultiHostService;
let alertService: AlertsToasterService;
let modalService: ModalService;
let store: MockStore;
let router: Router;
let actions$: any;

beforeEach(() => {
    TestBed.configureTestingModule({
        imports: [
            HttpClientTestingModule,
            AlertsToasterModule,
            ModalModule,
            RouterTestingModule,
            TranslateModule.forRoot()
        ],
        providers: [
            ApiDownloadService,
            ApiAuthenticationService,
            CryptoService,
            FeatureFlagService,
            MultiHostEffects,
            LogService,
            { provide: multiHostService, useValue: new MockMultiHostService() },
            provideMockStore(),
            {
                useValue: {
                    listByIds() {}
                }
            },
            SessionService,
            provideMockActions(() => actions)
        ]
    });
    actions = new Subject<any>();
    alertService = TestBed.inject(AlertsToasterService);
    modalService = TestBed.inject(ModalService);
    multiHostService = TestBed.inject(MultiHostService);
    store = TestBed.inject(Store);
    router = TestBed.inject(Router);
});
describe('Create', () => {
    const multiHost = new MultiHostSource();
    beforeEach(() => {
        multiHost.name = 'Test Name';
        multiHost.type =  'MultiHost - Microsoft SQL Server',
        //store.overrideSelector(selectMul, multiHost);
        effects = TestBed.inject(MultiHostEffects);
    });

    it('should create and dispatch a success action', done => {
        jest.spyOn(multiHostService, 'create').mockReturnValue(of(multiHost));

        actions$ = new ReplaySubject();
        actions$.next(createMultiHostSuccess);


        effects.create$.subscribe(action => {
            console.log('***************')
            expect(multiHostService.create).toHaveBeenCalled();
            
            expect(action).toEqual(createMultiHostSuccess);
        
            done();
        });
    });

This test is failing with timeout error

thrown: "Exceeded timeout of 5000 ms for a test. Use jest.setTimeout(newTimeout) to increase the timeout value, if this is a long-running test."

  86 |              });
  87 |
> 88 |              it('should create and dispatch a success action', done => {
     |              ^
  89 |                      jest.spyOn(multiHostService, 'create').mockReturnValue(of(multiHost));
  90 |
  91 |                      actions$ = new ReplaySubject();

what I am doing wrong here?

0

There are 0 answers