簡體   English   中英

帶有ng2-redux的Angular 4.4測試服務(angular-redux)

[英]Angular 4.4 testing service with ng2-redux (angular-redux)

我無法在服務中捕獲調度方法。 據我了解,這是有問題的,因為我需要的分派到Observable.subscribe()中。

這是服務:

@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

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);

  });

 });

});

因此,對於“捕獲調度調用計數”,我得到Expected 0等於1。如果我取消對第一次調度的注釋,測試就可以了,但這意味着我無法在訂閱區域中捕獲調度。 怎么了? 非常感謝您的建議。

我已經解決了問題。 這是規格的正確代碼。 也許還有另一種方法,但我發現了

....

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

  it('catch dispatch calls number', fakeAsync(()=> {

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

    testService.testMethod();

    tick(120); // in general it must be more then delay

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

  }));


}); 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM