【发布时间】:2019-07-25 14:13:19
【问题描述】:
我正在尝试自学如何使用 Angular 进行编码,但遇到了问题。我正在为自己创建一个应用程序,并且我刚刚实现了 Angular Material Dialog。我把它放在一个包装服务中,一切看起来都很好。所以在一个组件中,我调用 Wrapper Service 来引发这样的模式......
public assignInstrument(instrument: any): void {
this.modalDialogWrapperService.openAssignmentWindow({
product: 'instrument',
type: instrument.type,
serial: instrument.serial,
id: instrument.id
});
}
服务方法看起来像这样,注意我在模态窗口中传递了我希望提出的组件的名称
openAssignmentWindow(instrument) {
const dialogRef = this.dialog.open(ChangeAssignmentComponent, {
data: instrument,
width: '693px',
height: '498px'
});
dialogRef.afterClosed().subscribe(() => {});
});
}
一切都很好!但作为一名优秀的开发人员,我应该编写单元测试......所以为了测试我的组件,我进行了以下测试(我已经包括了我如何模拟服务和其他一些代码来给测试文件留下印象)
let modalDialogWrapperServiceSpy: jasmine.SpyObj<ModalDialogWrapperService>;
const mockModalDialogWrapperService = jasmine.createSpyObj('ModalDialogWrapperService', ['openAssignmentWindow']);
mockModalDialogWrapperService.openAssignmentWindow.and.returnValue({});
TestBed.configureTestingModule({
imports: [...],
declarations: [...],
providers: [{
provide: ModalDialogWrapperService,
useValue: mockModalDialogWrapperService
}]
}).compileComponents();
beforeEach(() => {
fixture = TestBed.createComponent(InstrumentsPageComponent);
modalDialogWrapperServiceSpy = TestBed.get(ModalDialogWrapperService);
component = fixture.componentInstance;
fixture.detectChanges();
})
describe('assignInstrument', () => {
it('should call the Modal Dialog Service', () => {
component.assignInstrument({});
expect(modalDialogWrapperServiceSpy.openAssignmentWindow).toHaveBeenCalledTimes(1);
});
});
这一项测试失败了!出现错误“错误:未找到 ChangeAssignmentComponent 的组件工厂。您是否将其添加到 @NgModule.entryComponents” - 这似乎很奇怪,因为在我的 app.module 文件中我在 entryComponents 和声明数组中声明了“ChangeAssignmentComponent”?我很困惑 - 有人知道我做错了什么吗?
【问题讨论】:
-
您是否在规范中导入了
module,其中您的组件为declared并添加为entryComponents? -
我的应用程序中只有一个模块,所以我没有在我的测试平台的导入数组中声明它,例如:
imports: [MatTableModule, MatPaginatorModule, MatDialogModule, NoopAnimationsModule],
标签: angular unit-testing jasmine