2017-01-30 24 views
0

現在、カルマとジャスミンでAngular2の単体テストを書いていますが、単体テストではかなり新しいので、いくつかの問題に直面しています。ハードコードされたプロパティや非同期関数を含まないプロパティをテストする場合は問題ありませんが、いくつかの変数が値を取得するためには、コンポーネントの関数を呼び出す必要があります。Angular2 - テストされたコンポーネントからの呼び出し関数

マイコンポーネント:

export class LoginComponent implements OnInit { 

formLoginId: string; 
loginUrl: string; 
email: string; 
password: string; 

constructor(private googleAuthService: GoogleAuthService, 
      private authService: AuthenticationService, 
      private validationService: ValidationService, 
      private router: Router, 
      private titleService: Title) { 
    this.titleService.setTitle("Login"); 
    this.formLoginId = "#form-login"; 
} 

ngOnInit() { 

    this.googleAuthService.getLink((response) => { 
     this.loginUrl= response.json().url; 
    });  
} 

login() { 
    if (this.validationService.isValid(this.formLoginId)) { 
     this.authService.login(this.email, this.password); 
    } 
} 

は、今私はloginUrlは、任意の値をとっているかどうかを確認することができますユニットテストを書きたい私は何をやっていることは次のようです。私のテストは鳴き声です:

describe('Login Component',()=> { 
    let component:LoginComponent; 
    let fixture:any; 

    beforeEach(async(()=> { 
     TestBed.configureTestingModule({ 
      //declarations,imports and providers 
     }).compileComponents(); 
    })); 

    beforeEach(() => { 
     fixture = TestBed.createComponent(LoginComponent); 
     component = fixture.componentInstance; 
    }); /some-other-tests/ 

    it('should have login url', fakeAsync(()=> { 
     component.ngOnInit(); 
     tick(1000); 
     expect(component.loginUrl).toBeDefined(); 
    })); 
}); 

しかし、それは動作しないようです。私はまだ上記の変数については未定義になっています。どのようにしてコンポーネントからメソッドを呼び出し、その結果の後に変数をチェックすることができますか?

ありがとうございます!

答えて

0

この場合、getLinkが決して解決しないので、いくつかの情報を返すようにGoogleAuthServiceをモックする必要があります。

GoogleAuthServiceの模擬プロバイダを指定して、既に解決されている観測可能オブジェクトを返すことができます。