У меня есть тест для компонента 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
ломала мне голову, и с определенным ответом от каждой из этих служб легче справиться.
]