невозможно прочитать свойство 'pipe' из неопределенного - Angular 6 - PullRequest
0 голосов
/ 09 января 2020

Component.ts

// Component containing function
Public myData(){
    this.myService.getData()
        .pipe(
            take(1),
            catchError((err: any) => {
                this.myRows = [];
                return throwError(err);
            }),
            finalize(() => {
                console.log('In Finally');
            })
        )
        .subscribe((rows) => {
            this.myRows = rows;
            // Do something
        });
}

myService.ts

// Service Call
public getData(): Observable < customer[] > {
    const url = 'some url';
    return this.http.get(url).pipe(
        map(this.checkForError),
        catchError((err: HttpErrorResponse) => {
            return throwError(err);
        }),
        map(this.myJson),
        share()
    );
}

spe c .ts

    // Test Case
    it('should test', () => {
        let test =  spyOn(myService, 'getData');
        component.myData();
        expect(test).toHaveBeenCalled();
    });

Не удалось устранить эту ошибку. Не удалось найти простой способ написания контрольного теста для сервисного вызова. Как мы можем устранить ошибку трубы?

Ответы [ 3 ]

1 голос
/ 10 января 2020

попробуйте это:

объявить канал в файле ts

import { Component, OnInit, Input, Pipe } from '@angular/core';

@Pipe({                   //use for filter pipe
  name: "dataFilter"
})
0 голосов
/ 09 января 2020

Ошибка, кажется, на this.myService.getData().pipe(...
Поскольку в вашем тесте вы шпионите за "getData", но вы не возвращаете никакого значения и, в частности, не наблюдаемое от шпиона.

Что вы может захотеть сделать в своем тесте:

const customers = []; // define here your testing array
spyOn(myService, 'getData').and.returnValue(of(customers)); // "of" is a Rxjs function to create an Observable
0 голосов
/ 09 января 2020

Вы пытались использовать функцию asyn c, например:

it('should test', fakeAsync(() => { // Add FakeAsync
    let test =  spyOn(myService, 'getData');
    component.myData();
    tick(); // Add this
    expect(test).toHaveBeenCalled();
}))
...