2017-12-02 13 views
0

私のサービスでディスパッチメソッドをキャッチできません。私が理解する限り、Observable.subscribe()に必要なディスパッチがあるので、問題があります。ここでng2-redux(angular-redux)を使用したAngular 4.4テストサービス

はサービスです。

ここ
@Injectable() 
export class AuthUserBackendService extends BaseBackendDataService{ 

constructor(
private http: Http, 
private tokenLoader: TokenLoaderBackendService, 
private ngRedux: NgRedux<IAppState>, 
private logger: LoggerService, 
private errorService: BackendDataErrorsService 
) { 
    super(http, tokenLoader, ngRedux, logger, errorService); 
} 
........ 
testMethod() { 

// this dispatch ok 
// this.ngRedux.dispatch({type: 
ActiontionsBackendData.authUserBackendActions.startHttpRequestAuthUser}); 

Observable.of({Id: 'testId', Name: 'TestName'}).delay(100).subscribe(
    (result) => { 

    const payload = {authUser: result}; 

    // this dispatch I can't catch in test 
    this.ngRedux.dispatch({type: ActionsBackendData. authUserBackendActions. 
    receivedAuthUserHttpResponseSuccess, payload: payload}); 
    }); 
} 
} 

がある私の.spec.ts私が最初のディスパッチのコメントを解除した場合、私は同じ1に0を期待得るので、「キャッチ・ディスパッチ・コールがカウント」の

let testService: AuthUserBackendService; 
let mockState: any = { 
authUserState: { 
    authUser: null 
} 
}; 
let mockRedux: NgRedux<IAppState> = new MockRedux(mockState); 


describe('AuthUserBackendService',() => { 

beforeEach(() => { 
TestBed.configureTestingModule({ 
    imports: [ 
    ToastyModule, 
    TranslateModule.forRoot(), 
    NgReduxModule, 
    LoggerModule, 
    MockBackendModule, 
    RouterTestingModule.withRoutes([]), 
    BackendDataModule, 
    CoreModule 
    ], 
    providers: [ 
    {provide: Router, useClass: RouterTestingModule}, 
    {provide: NgRedux, useValue: mockRedux}, 

    ] 
}); 



    testService = TestBed.get(AuthUserBackendService); 

}); 

    it('should be created',() => { 
    expect(testService).toBeTruthy(); 
    }); 

describe('testMethod()',()=>{ 

it('catch dispatch calls count',()=> { 

    const spy = spyOn(mockRedux, 'dispatch'); 

    testService.testMethod(); 

    expect(spy.calls.count()).toEqual(1); 

    }); 

}); 

}); 

テストは大丈夫ですが、購読エリアでのディスパッチができないことを意味します。なにが問題ですか?あなたの助言に多くの感謝。

答えて

0

私はこの問題を解決しました。ここに仕様の正しいコードがあります。多分別の方法があるかもしれませんが、私はそれを見つけました

関連する問題