Модульный тест с ngxs для извлечения массива объектов - PullRequest
0 голосов
/ 04 февраля 2019

Я хочу создать модульный тест для получения списка пользователей с помощью ngxs, но я не знаю, как его написать.Документация не является конкретной по этому поводу.Если кто-то может мне помочь.Спасибо

Вот что у меня есть в моем тестовом файле до

user.state.spec.ts

import { async, TestBed } from '@angular/core/testing';
import { NgxsModule, Store } from '@ngxs/store';
import { UserState } from '@app/store/state/user.state';
import { GetUsers } from '@app/store/actions/user.actions';
import { User } from '@app/models/User';
import { UserService } from '@app/providers/user.service';
import { HttpClientModule } from '@angular/common/http';

describe('User', () => {
  let store: Store;

  beforeEach(async(() => {
    TestBed.configureTestingModule({
      imports: [
        NgxsModule.forRoot([UserState]),
        HttpClientModule
      ],
      providers: [UserService]
    }).compileComponents();

    store = TestBed.get(Store);
  }));

  describe('GET_USER_LIST', () => {
    it('should return list of user', () => {

      const action = new GetUsers();
      store.dispatch(action);

      store.selectOnce((state: UserState) => state.getUsers).subscribe(actual => {
        expect(actual).toEqual(User[]);
      })
    });
  });
});

user.state.ts

 @Action(GetUsers)
  getUsers({ getState, setState }: StateContext<UserStateModel>) {
    return this.userService.fetchUsers().pipe(
      tap(result => {
        const state = getState();
        setState({
          ...state,
          users: result
        });
      })
    );
  }

Movie.ts

export interface Movie {
  id: number;
  title: string;
  imageUrl: string;
  liked: boolean;
  favorited: boolean;
}
...