У меня есть компонент, для которого я пишу модульный тест с методом addItem
, который просто помещает новый экземпляр типа в массив, полученный от службы. Я пытаюсь написать тест с использованием жасмина и зрителя, чтобы убедиться, что длина элемента обновляется. Я хоть убей не могу понять, почему изменение состояния не обнаруживается, и я думаю, что должно быть какое-то базовое c непонимание того, как жасмин моделирует компоненты.
* 1003 component
// component.ts
import { ThingService } from '...'
import { Thing, Parent } from '...'
@Component{...}
export class ThingHandlerComponent implements OnInit {
thingParent: Parent;
things: Thing[];
constructor(private thingService: ThingService) { }
......
ngOnInit() {
this.thingParent = this.thingSevice.getThingParent();
this.things = this.thingParent.things;
}
// relevant method that I'm trying to test
addThing() {
this.things.push(new Thing());
}
// component.spec.ts
describe('ThingComponent', () => {
// ... setup methods with spectator and create a static instance of things with 2 items in array
it('should have instance of things', () => {
expect(spectator.component.things).toHaveLength(2) // this passes
});
it('should add value', () => { // fails, still expects 2
spyOn(spectator.component, 'addThing').and.callThrough();
spectator.detectChanges(); // same as fixture.detectChanges
expect(spectator.component.things).toHaveLength(3); // Fails: Expected element to have length 3, but had 2
});
})
Это похоже на такой простой тест, что я чувствую, что мне, должно быть, не хватает какого-то понимания того, как компилируются тестовые компоненты. Я также попытался обернуть этот тест методом asyn c () с помощью spectator.fixture.whenStable (). Любая помощь будет оценена. Кроме того, если вы не знакомы со зрителем, это библиотека, которая помогает с настройками зависимостей для тестов компонентов. он предоставляет 'fixture' то же значение, что и TestBed.createComponent