[英]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.