Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

90
Vistas
Simular ngrx/store en pruebas Angular2

¿Podrías ayudarme a burlarme de la Tienda? He visto esto y estas preguntas por un error un poco diferente. Estoy usando la tienda en uno de mis servicios, donde uso los métodos de envío, selección y obtención de la tienda. Me burlé de la tienda siguiendo la sugerencia de @noelmace y usé el siguiente despachador, reductor y estado creando la tienda:

 export class ObservableMock implements Observer<any> { closed?: boolean = false; // inherited from Observer nextVal: any = ''; // variable I made up constructor() { } next = (value: any): void => { this.nextVal = value; }; error = (err: any): void => { console.error(err); }; complete = (): void => { this.closed = true; } } let _reducer: ObservableMock = new ObservableMock(); let _dispatcher: ObservableMock = new ObservableMock(); let state$: Observable<any> = new Observable<any>();

Así que mi clase de Mockstore se ve como sigue:

 export class MockStore<T> extends Store<T> { //as given above constructor() { super(_dispatcher, _reducer, state$); } //as given above }

Sin embargo, cuando trato de definir mi servicio en la siguiente forma de prueba, dice

TypeError: _store.select no es una función

Esta falla es causada por la siguiente línea en el constructor TestedService:

 constructor(private _store: Store<TabStore>) { let tabStore: Observable<TabStore> = _store.select<TabStore>('myReducer');| }

Aquí está mi prueba:

 beforeEach(() => { TestBed.configureTestingModule({ imports: [ // StoreModule.provideStore({myReducer: myReducer}), ], providers: [ {provide: Store, useClass: MockStore}, { provide: TestedService, useFactory: (tabStore: Store<TabStore>): TestedService=> { return new TestedService(myStore); }, deps: [Store] } ] }); });

Comentar las importaciones tampoco ayuda. ¿Alguien tiene idea de lo que tiene de malo burlarse?

about 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Finalmente encontré una solución para burlarme de la tienda. No estoy seguro si la respuesta de @maxisam es correcta o incorrecta, pero aquí hay una solución que he usado.

 let _reducer: ObservableMock = new ObservableMock(); let _dispatcher: ObservableMock = new ObservableMock(); let state$: Observable<any> = new Observable<any>(); export class MockStore<T> extends Store<T> { private _fakeData: Object = {}; private fakeDataSubject: BehaviorSubject<Object> = new BehaviorSubject(this._fakeData); select = <T, R>(mapFn: any, ...paths: string[]): Observable<any> => { if (typeof mapFn !== 'function') { mapFn = () => mapFn; } return this.fakeDataSubject.map(mapFn); }; constructor() { super(_dispatcher, _reducer, state$); } nextMock(mock: Object, ...keys: string[]) { let curMockLevel = this._fakeData = {}; keys.forEach((key, idx) => { curMockLevel = curMockLevel[key] = idx === keys.length - 1 ? mock : {}; }); this.fakeDataSubject.next(this._fakeData); } get fakeData() { return this._fakeData; } }

Esto se puede utilizar más tarde de la siguiente manera:

 {provide: Store, useClass: MockStore}
about 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda