【发布时间】:2019-01-25 22:08:58
【问题描述】:
这是测试平台设置。模拟并提供所需的一切:
let component: PageUploadContainer;
let store;
let route;
let fixture: ComponentFixture<PageUploadContainer>;
const sanitizer = jasmine.createSpyObj('sanitizer', ['bypassSecurityTrustResourceUrl']);
sanitizer.bypassSecurityTrustResourceUrl.and.callFake(url => url);
const mockTranslate = {
instant: label => label,
};
beforeEach(() => {
store = createMockStore<AppState>(reducers);
route = new MockActivatedRoute();
});
beforeEach(() => {
TestBed.configureTestingModule({
imports: [translationModule],
declarations: [
PageUploadContainer,
MockTranslatePipe,
MockTranslateCutPipe,
],
schemas: [NO_ERRORS_SCHEMA],
providers: [
FormBuilder,
{ provide: DomSanitizer, useValue: sanitizer },
{ provide: Store, useValue: store },
{ provide: ActivatedRoute, useValue: route },
{ provide: TranslateService, useFactory: () => mockTranslate },
],
}).compileComponents();
});
beforeEach(() => {
fixture = TestBed.createComponent(PageUploadContainer);
component = fixture.componentInstance;
component.mappingTriggered$ = Observable.of(false);
});
我有以下代码,我用 testBed 设置了我的测试:
onGoTo(uploadStep: string) {
if (uploadStep === NAVIGATION.DEFAULT) {
this.store.dispatch(new ReplaceSelectedCompanies([]));
this.companyIds$.filter(isEmpty)
.take(1)
.subscribe(() => {
this.store.dispatch(new Navigate({ direction: uploadStep}));
});
} else {
this.store.dispatch(new Navigate({ direction: uploadStep}));
}
}
还有我的测试。由于new Navigate({ direction: uploadStep}) 是异步的,所以这个测试失败了
it('if navigation default and companyIds empty should call navigate', () => {
component.companyIds$ = Observable.of(['123', '234']);
component.onGoTo(NAVIGATION.DEFAULT);
expect(store.dispatch).toHaveBeenCalledWith(new ReplaceSelectedCompanies([]));
expect(store.dispatch).toHaveBeenCalledWith(new Navigate({ direction: NAVIGATION.DEFAULT }));
});
你能帮我测试一下这些方法吗?
【问题讨论】:
-
请发布您的设置。我没有看到测试台。此外,它是异步的,但您的测试是同步运行的。
-
@christo8989 添加了设置
标签: angular jasmine rxjs angular5 rxjs6