Мой testing.spec.ts не работает.Ошибка: невозможно создать XHR из поддельного асинхронного теста.URL запроса: http://xxxxxx/v1/products - PullRequest
0 голосов
/ 30 мая 2018

Я попробовал этот тест для тестирования моей службы:

Показать эту ошибку:

Ошибка: невозможно выполнить XHR из поддельного асинхронного теста.URL запроса: http://xxxxxx/v1/products

тестовый файл

it('should return reasonable json ssss', inject([ProductService, MockBackend], fakeAsync((service: ProductService, mockBackend) => {

    const mockResponse = {
        data: [
            { id: 0, details: 'All cats are lions' },
            { id: 1, details: 'Video 1' },
            { id: 2, details: 'Video 2' },
            { id: 3, details: 'Video 3' },
        ]
    };

    mockBackend.connections.subscribe(connection => {
        connection.mockRespond(new Response(
            new ResponseOptions({
                body: [
                    { id: 0, details: 'All cats are lions' },
                    { id: 1, details: 'Video 1' },
                    { id: 2, details: 'Video 2' },
                    { id: 3, details: 'Video 3' },
                ]
            })));
    });

    service.productsgetall().subscribe((facts) => {
        console.log(facts)
        expect(facts.length).toBe(4);
    });

    tick();
})));

- My service.ts

public productsgetall(): Observable<Products[]> {
                ...
 return this.http.get(Api.getUrl(Api.URLS.productsgetall), {
      headers: headers
    }).map((response: Response) => {
        let res = response.json();
        if (res.StatusCode === 1) {
          this.auth.logout();
        } else {
          return res.StatusDescription.map(aa => {
            return new Products(aa);
          });
        }
  });
}

Можете ли вы спросить меня, в чем проблемамой код, как написать хорошее тестирование?

Мой код редактирования:

TypeError: done.fail не является функцией

 it('should return reasonable json ssss', (done) => {
        inject([ProductService, MockBackend], async((service: ProductService, mockBackend: MockBackend) => {
                const mockResponse = {
                data: [
                    { id: 0, details: 'All cats are lions' },
                    { id: 1, details: 'Video 1' },
                    { id: 2, details: 'Video 2' },
                    { id: 3, details: 'Video 3' },
                ]
            };
                mockBackend.connections.subscribe(connection => {
                connection.mockRespond(new Response(
                    new ResponseOptions({
                        body: [
                    { id: 0, details: 'All cats are lions' },
                    { id: 1, details: 'Video 1' },
                    { id: 2, details: 'Video 2' },
                    { id: 3, details: 'Video 3' },
                        ]
                    })));
            });

            service.productsgetall().subscribe(facts=> {
                console.log(facts);
                console.log(facts[0]);
                expect(facts[0].details).toEqual('ffff');
                done();
            });
        }))();
    });

изображение

1 Ответ

0 голосов
/ 30 мая 2018

Ошибка ясно говорит о том, что вы не можете делать XHR-запросы, используя fakeAsync.

Используйте async вместо fakeAsync

it('.....', inject([ProductService, MockBackend], async((service: ProductService, mockBackend) => {

    .................

    service.productsgetall().subscribe((facts) => {
        console.log(facts)
        expect(facts.length).toBe(4);
    });

    tick();      // tick might not work with async
})));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...