2016-12-30 7 views
1

が定義されていない私は、サービスを使用するコンポーネント(GamePanelComponent)をテストしようとしています:GamePanelComponent.ts内部 :Angular2テスト - 注入されたサービスのメソッドが

constructor(private playerService: PlayersService, private leaderBoardService: LeaderBoardService) { } 

comp.IsValidMoveある選手はgetPlayers方法にサービスを提供使用しますが、残念ながら私はこのエラーが発生しています:TypeError: Cannot read property 'getPlayers' of undefined

ここは、Angular2テストチュートリアルに従って書かれた私のテストファイルです。あなたは、私は(それが元のサービスのインスタンスだから)getPlayers()メソッドを持ってスタブを注入DO見ることができるように:

import { ComponentFixture, TestBed, async } from '@angular/core/testing'; 
import { By }    from '@angular/platform-browser'; 
import { DebugElement } from '@angular/core'; 

import { GamePanelComponent } from './gamepanel.component'; 
import { GamePanelOutputComponent } from '../gamepaneloutput/gamepaneloutput.component'; 

import { PlayersService } from '../../services/players/players.service'; 
import { LeaderBoardService } from '../../services/leaderboard/leaderboard.service'; 

import { Player } from '../../models/player/player'; 

describe('GamePanelComponent (inline template)',() => { 

    let comp: GamePanelComponent; 
    let fixture: ComponentFixture<GamePanelComponent>; 
    let playersService, playersServiceStub, componentPlayersService : PlayersService; 

    beforeEach(async (() => { 

    this.playersServiceStub = new PlayersService(); 
    this.playersServiceStub.players = []; 
    this.playersServiceStub.players[0] = new Player('','X'); 
    this.playersServiceStub.players[1] = new Player('','O'); 

    TestBed.configureTestingModule({ 
     declarations: [ GamePanelComponent, GamePanelOutputComponent ], // declare the test component 
     providers: [ { provide: PlayersService, useValue: playersServiceStub }, { provide: LeaderBoardService } ] 
    }).compileComponents() 
     .then(() => { 
      fixture = TestBed.createComponent(GamePanelComponent);    
      comp = fixture.componentInstance; 

      // PlayerService actually injected into the component 
      playersService = fixture.debugElement.injector.get(PlayersService); 
      componentPlayersService = playersService; 
      // PlayersService from the root injector 
      playersService = TestBed.get(PlayersService); 
     }); 
    })); 

    it('isValidMove',() => { 
     comp.ngOnInit(); 
     comp.game.board[0][0] = 'X';  
     let isValid = comp.isValidMove(0,0); 
     expect(isValid).toBe(false); 
    }); 

}); 

答えて

3

あなたがbeforeEachコールバックでthisを使用することになっていません。それはクラスではありません。したがって、this.playersServiceStubはの外部に宣言された同じplayerServiceStubを指していません。したがって、プロバイダとして未定義に渡しています。ちょうど使用する

playersServiceStub = new PlayersService(); 
関連する問題