Test Observable <Pizza>с использованием Jest в ngRx - PullRequest
0 голосов
/ 29 апреля 2020

Я пытаюсь создать пиццу $, которую получают из магазина, а затем отображать эти данные.

Затем я помещаю эти данные о пицце в сетку, и все выглядит хорошо.

full код

import { Store } from '@ngrx/store';
import { ProductesState } from '../shared/models/productesState.model';
import { Observable } from 'rxjs';
import { PizzaState } from '../shared/models/pizzaState.model';

@Component({
  selector: 'app-read',
  templateUrl: './read.component.html',
  styleUrls: ['./read.component.css']
})
export class ReadComponent {

  public pizzas$: Observable<PizzaState>;
  private readonly store;

  constructor(private readonly pizzaStore: Store<any>) { 
     this.store = pizzaStore;
     this.getPizzaData();
  }

  public getPizzaData() {
     this.pizzas$ = this.store.select('pizzas');  
  }

}

Как бы я go о тестировании этого компонента? Я попробовал следующий шутник, но он не прошел с ошибкой

this.store.select is not a function

код теста

import { PizzaModel} from '../models/pizza-model';
import { createFakePizza } from '../test-utils/fake-pizza-helper';


    let entityAdapter: EntityAdapter<PizzaModel>;
    let initialEntityState: EntityState<PizzaModel>;    
    let store: any;
...

beforeAll(() => {
      entityAdapter = createEntityAdapter<PizzaModel>();
      initialEntityState = entityAdapter.getInitialState();
    });

describe('getAllPizzas' () => {

  it('should return all pizzas' () => {
   // Arrange
   const fakePizza = [createFakePizza(), createFakePizza()];
   const entityState = entityAdapter.addAll(fakePizza, intialEntityState);

   store = {
    entity: entityState.entities,
   };

  // Act
  const res = new ReadComponent(store);
  res.getPizzaData();


  //Assert
  expect(res.pizzas$).toEqual(fakePizza);

  }

}

Я получаю следующую ошибку

TypeError: this.store.select is not a function

Пожалуйста, помогите. спасибо =)

1 Ответ

0 голосов
/ 29 апреля 2020

Вам нужно добавить функцию select в ваш фиктивный магазин.

import { of } from 'rxjs';
.....

store = {
  entity: entityState.entities,
  select: () => {
    return of([createFakePizza(), createFakePizza()]);
  },
};

Вы можете select вернуть что-то, связанное с entities, но я оставлю это вам.

...