Тестирование пряжи не подбирает макет класса - PullRequest
0 голосов
/ 07 мая 2020

У меня есть тест для компонента angular, который использует фиктивную службу:

import { TestBed, ComponentFixture } from '@angular/core/testing';

import { AlertComponent } from './alerts.component';
import { AlertService } from '../alerts.service';
import { AlertServiceMock } from '../alerts.service.mock';

fdescribe('AlertsComponent', () => {
  let fixture: ComponentFixture<AlertComponent>;
  let component: AlertComponent;
  let alertServiceMock: AlertServiceMock;

  beforeEach(() => {
    alertServiceMock = new AlertServiceMock();

    TestBed.configureTestingModule({
      declarations: [ AlertComponent ],
      providers: [
        {provide: AlertService, useValue: alertServiceMock },
      ],
    }).compileComponents();
    fixture = TestBed.createComponent(AlertComponent);
    component = fixture.componentInstance;
  });

  it('should be created', () => {
    fixture.detectChanges();
    expect(component).toBeTruthy();
  });

  // More actual useful tests not shown
});

... и фиктивная служба читает:

import { of as observableOf, Observable } from 'rxjs';
import { Alert } from './alerts';
import { IAlertService} from './alerts.service';

export class AlertServiceMock implements IAlertService {
    test_alert: Alert[]|null = null;

    constructor() { }

    getAlerts(): Observable<Alert[] | null> {
        console.log('mock-alerts:' + this.test_alert);
        return observableOf( this.test_alert );
    }

By dint тестирования console.log, я подтвердил, что код не , используя AlertServiceMock, а AlertService.

Как правильно определить и использовать a

[и для ясности:

1) Тесты для AlertService в порядке

2) Я хочу иметь возможность

  it('it should show multiple alerts', () => {
    alertServiceMock.test_alert = [{
      id: 1,
      display_message: 'Foo',
      is_enabled: true,
    }, {
      id: 2,
      display_message: 'Bar',
      is_enabled: true,
    }];
    fixture.detectChanges();
    const compiled = fixture.debugElement.queryAll(By.css('p'));
    expect(compiled.length).toBe(2);
  });

в рамках моего тестирования

3) Я написал рабочий тест для этого компонента, в котором я имитирую ответ http, который сам AlertService получает ..... однако у меня есть другие компоненты в проекте, которые используют несколько сервисов, и насмешка над множеством ответов http ломала мне голову, и с определенным ответом от каждой из этих служб легче справиться.

]

...