Как проверить функцию внутри ngOnInit - PullRequest
0 голосов
/ 16 мая 2018

Мой класс компонентов прост. Он принимает входные данные от родительского компонента и на основе этих входных данных разрешает параметр из ENUM внутри ngOnInit
Мой класс компонентов:

export class TestComponent implements OnInit {
@Input() serviceType: string;
serviceUrl : string;

ngOnInit() {
        this.findServiceType();
    }
    
findServiceType= () => {
        if (this.serviceType) {
            if (this.serviceType === 't1') {
                this.serviceUrl = TestFileEnumConstants.T1_URL;
            }else if (this.serviceType === 't2') {
                this.serviceUrl = TestFileEnumConstants.T2_URL;
            }
        }
    }
    
 }

Мой тестовый класс:

describe('testcomponent', () => {

    let component: TestComponent;
    let fixture: ComponentFixture<TestComponent>;
    let mockService = <Serv1>{};
    
    beforeEach(() => {
        TestBed.configureTestingModule({
            imports: [FormsModule],
            declarations: [
                TestComponent, TestChildComponent],
            providers: [
                { provide: MockService, useValue: mockService }
                ]
        });
        fixture = TestBed.createComponent(TestComponent);
        component = fixture.componentInstance;
    });
    
    it('should create testcomponent', () => {
        expect(component).toBeDefined();
    });
    
     describe('testType1',  () => {
        beforeEach( () => {
            spyOn(component, 'findServiceType');
            
        });
        it('should correctly wire url based on type1', () => {
            component.serviceType = 'type1';
            fixture.detectChanges(); 
            expect(component.findServiceType).toHaveBeenCalled();
            expect(component.serviceUrl).toBe(TestFileEnumConstants.T1_URL)
        });
    });
    
    }


Проблема в том, что serviceUrl не получен в результате, потому что 'serviceType' - ввод поступает как undefined даже после вызова обнаружения изменений.

Ответы [ 2 ]

0 голосов
/ 18 мая 2018

Проблема возникла из-за оператора SpyOn в сегменте beforEach().Поскольку фиктивная функция не возвращает никаких данных, возвращаемое значение продолжает получать undefined.Постановка задачи приведена ниже, я должен прокомментировать заявление spyOn:

beforeEach( () => {
            // spyOn(component, 'findServiceType');
            
        });

Убрал эту функцию и работал нормально.

0 голосов
/ 16 мая 2018

Вы должны создать два теста вместо одного. Первый тест, если this.findServiceType(); вызывается на ngOnInit, а затем второй тест, который проверяет функциональность findServiceType в изоляции.

it('should correctly wire url based on type1', () => {
   component.serviceType = 'type1';
   component.findServiceType()

   expect(component.serviceUrl)
       .toBe(TestFileEnumConstants.T1_URL)
});
...