【发布时间】:2019-01-14 22:55:28
【问题描述】:
我正在尝试为我的效果编写一些单元测试,但似乎测试没有到达我拥有expect 的部分。我不想使用jasmine-marbles,我只想使用开箱即用的普通jasmine。
效果
@Effect
loadData$: Observable<Action> = this.actions$.pipe(
ofType(actions.LOAD_DATA),
switchMap(actions =>
this.dataService.getData().pipe(
map(data => new actions.LoadDataSuccess(data)),
catchError(err => of(new actions.LoadDataFailed(err)))
)
)
);
规范文件
let effects: fromData.DataEffects;
let actions: Observable<any>;
let mockState: fromData.DataState;
let mockDataService: jasmine.SpyObj<DataService>;
beforeEach((async(() => {
mockState = { name: 'Test', age: 40 };
mockDataService = jasmine.createSpyObj({'dataService', getData: of<Data>(mockState)});
TestBed.configureTestingModule({
imports: [],
providers: [
fromData.DataEffects,
provideMockActions(() => actions),
{ provide: DataService, useValue: mockDataService }
]
});
effects = TestBed.get(fromData.DataEffects);
})));
it('should return new success action after load', fakeAsync(() => {
let data: any;
const actions = new ReplaySubject(1);
actions.next(new fromData.LoadAction());
effects.loadData$.subscribe(result => {
data = result;
});
tick(100);
expect(data).toEqual(fromData.LoadDataSuccess);
}));
测试失败,因为Expected undefined to equal Function。
请注意,我使用的是 Angular 6 和最新的 ngrx 和 RxJS 6。
谢谢!
【问题讨论】:
-
尝试改变tick内的时间,给它更多然后再试一次
标签: angular jasmine angular6 ngrx-effects rxjs6