Модульный тест Angular 2 для компонента

Я использую ng2 с webpack 2.

Я не могу понять, как тестировать функции компонента Вот мой компонент

import { Component, OnInit } from '@angular/core';
import { GlobalDataService } from '../global.service';
import { Router } from '@angular/router';
@Component({
    selector: 'login',
    templateUrl: './login.component.html'
})
export class LoginComponent {
    constructor(private gd: GlobalDataService, private router: Router) { }
    login(): void {
        this.gd.shareObj['role'] = 'admin';
        this.router.navigateByUrl('/login');
    }
}

Я хотел бы протестировать функцию login() и посмотреть, если this.gd.shareObj['role'] = 'admin'; действительно настроен как администратор.

Как может выглядеть файл .spec.ts?


person Viesturs    schedule 11.05.2017    source источник


Ответы (1)


Я бы сделал это следующим образом:

class RouterStub {
  navigateByUrl(url: String) { return url; }
}

class GlobalDataServiceStub {
  shareObj: any = {};
}

describe('LoginComponent', () => {
  beforeEach(() => {
    TestBed.configureTestingModule({
      declarations: [LoginComponent],
       providers: [
         { provide: GlobalDataService, useClass: GlobalDataServiceStub },
         { provide: Router, useClass: RouterStub }
       ]
    });

    fixture = TestBed.createComponent(LoginComponent);
    comp = fixture.componentInstance;
  });

  it('should set role to admin',
    inject([GlobalDataService], (gd: GlobalDataService) => {
        comp.login();
        expect(gd.shareObj['role']).toBe('admin');
    })
  );

});

Пример планкера

person yurzui    schedule 11.05.2017