Angular модульное тестирование не обновляет состояние при нажатии - PullRequest
0 голосов
/ 26 мая 2020

У меня есть компонент, для которого я пишу модульный тест с методом 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

...