在Angular业力茉莉花中遇到单元测试问题。
我想测试构造onCreate()
的{{1}}方法,并在提交时应调用NgbModal
。问题在于,即使您将restApiService
与SpyOn
一起使用,在单元测试中也不会提交。
这是我的Observable
:
OnCreate()
这是我的单元测试:
public onCreate() {
this.modalRef = this.modalService.open(CreateEntityFormComponent);
// input necessary settings
this.modalRef.componentInstance.tableSettings = this.parentTableSettings;
this.modalRef.componentInstance.tableColumns = modalColumns;
// subscribe for form submission
this.modalRef.componentInstance.submit.subscribe((formValue) => {
// fire a create method
this.restApiHelper.create(this.parentTableSettings.entityName, formValue).subscribe(
(resp: any) => {
const newEntityId = resp;
// show success notification
this.notifications.success(this.__('Entry added successfuly.'));
}
(err: any) => {
// upon failure dont close the modal, just reanable form submission and show error notification
this.modalRef.componentInstance.savingIndicator = false;
this.errorHandler.error(err);
});
});
}
我总是得到describe(`SignallingLinkSet Component`, () => {
let injector: TestBed;
let comp: SignallingLinkSetComponent;
let fixture: ComponentFixture<SignallingLinkSetComponent>;
let restApiHelperService: RestApiHelper;
beforeEach(() => {
TestBed.configureTestingModule({
imports: [
CommonModule,
ReactiveFormsModule,
NgbModule.forRoot(),
HttpClientModule,
],
declarations: [
SignallingLinkSetComponent
],
providers: [
RestApiHelper,
HttpTestingController,
NgbModal,
]
});
injector = getTestBed();
fixture = TestBed.createComponent(SignallingLinkSetComponent);
comp = fixture.componentInstance;
restApiHelperService = fixture.debugElement.injector.get(RestApiHelper);
spyOn(comp.modalService, 'open').and.callThrough();
fixture.detectChanges();
});
it('onCreate()', () => {
// mock data
const formData = {
linksNumber: '1',
name: 'test'
};
const response = {SignallingLinkSet: 10846692};
const submitSpy = spyOn(comp.modalRef.componentInstance, 'submit').and.returnValue(Observable.of(formData));
spyOn(comp.restApiHelper, 'create').and.returnValue(Observable.of(response));
comp.onCreate();
// assert
expect(comp.modalRef.componentInstance).not.toBeUndefined();
expect(submitSpy).toHaveBeenCalled();
expect(restApiHelperService.create).toHaveBeenCalledTimes(2);
});
});
,所以从未调用过提交模拟。
感谢您的帮助
更新:我将Expected spy submit to have been called.
更改为comp.modalRef = modalService.open(CreateEntityFormComponent);
,但是现在我得到spyOn(comp.modalService, 'open').and.callThrough();
不确定