Угловое тестирование впервые метод, который возвращает Observable

1

Привет, спасибо за ваше время:

Я пытаюсь узнать, как тестировать службу, которая имеет метод возврата Observable.

Я проделал экскурсию по руководству героев страницы "Угловая" до модуля маршрутизации, и я бы хотел, чтобы блок тестировал код.

Вот MyHeroService:

    import {Injectable} from '@angular/core';
import {HEROES} from '../mock-heroes';
import {Hero} from '../Hero';
import {Observable} from 'rxjs/Observable';
import {of} from 'rxjs/observable/of';
import {MessageService} from '../message.service';

@Injectable()
export class MyHeroService {

  getHeroes(): Observable<Hero[]> {
    this.messageService.add('HeroService: fetched all your heroes');
    return of(HEROES);
  }

  getHero(id: number): Observable<Hero> {
    // Todo: send the message _after_ fetching the hero
    this.messageService.add('HeroService: fetched hero id=${id}');
    return of(HEROES.find(hero => hero.id === id));
  }

  constructor(private messageService: MessageService) {
  }

}

И вот единичный тест, который я сейчас делаю:

    import {MyHeroService} from './my-hero.service';
import {MessageService} from '../message.service';
import {async, inject} from '@angular/core/testing';

describe('heroService', () => {


  it('should return an Observable of Hero[]', async(() => {
    const myHeroService = new MyHeroService(new MessageService([]));
    myHeroService.getHero(1).subscribe(result => expect(result).toBeGreaterThan(0));
  }));
});

Результат, который дает тест: Изображение 174551

Я также прочитал: Единичное тестирование наблюдаемого в Angular 2

Единичный тест "успех" и "ошибка" наблюдаемого ответа в компоненте для углового 2

Угловой 2 Неисправный слуховой аппарат Karma Jasmine Unit

Не могли бы вы помочь мне, пожалуйста, понять, почему он дает "Ожидаемое неопределенное значение больше 0."

Теги:
angular
unit-testing

1 ответ

0

Я думаю, что ваша проблема в том, что вы не правильно вводите свою услугу (вы импортируете "инъекцию" из "@angular/core/testing", но не используете ее).

Лучший способ проверить угловое обслуживание - это метод Angular TestBed, который:

Настраивает и инициализирует среду для модульного тестирования и предоставляет методы для создания компонентов и сервисов в модульных тестах.

import { TestBed, inject, async} from '@angular/core/testing';
import { HeroService } from './hero.service';

describe('Testing Angular Heroes', () => {
  beforeEach(async(() => {
     TestBed.configureTestingModule({
        providers: [
           HeroService
        ]
     }).compileComponents();
  }));

  describe("Testing my awesome function", () => {
     it('should return true when I call getTrue', inject([HeroService], (heroService: HeroService) => {
        expect(heroService.getTrue()).toBe(true)
     }));
  })
});

Здесь находится plunkr, работающий с Jasmine и приведенный ниже пример: https://embed.plnkr.co/Kgkozh7gZ9GMdwHgjcph/

Источники:

https://blog.thoughtram.io/angular/2016/11/28/testing-services-with-http-in-angular-2.html https://angular.io/api/core/testing/TestBed

Ещё вопросы

Сообщество Overcoder
Наверх
Меню