angular - beforeEach 在 MockRender 调用中没有错误地死掉
问题描述
我正在使用 ngMocks 测试一个组件,但我的规范一直以“formGroup 需要一个 FormGroup 类型的实例,请提供一个”而失败。
我能够验证component
实际上从未设置过。事实上,在我调用的标记行之后的每一行都MockRender
没有被调用,beforeEach
因此没有设置组件。
正如您所看到的,我试图formGroup
在组件中提供一个默认值,以在正在执行它的事情时阻止问题的发生,MockRender
但这并没有改变任何事情。
任何想法a)我能做些什么来解决这个问题?b)为什么在我的规范中没有抛出错误而不是抛出错误MockRender
?expect
规格:
describe('CombinedMultiControlFormFieldComponent', () => {
let component: CombinedMultiControlFormFieldComponent;
let fixture;
const mockDialog = {
open() {
}
};
beforeEach(async () => {
return MockBuilder(CombinedMultiControlFormFieldComponent)
.keep(MatFormFieldModule)
.keep(FormsModule)
.keep(ReactiveFormsModule)
.mock(ConcatFormGroupValuesPipe)
.provide({provide: MatDialog, useValue: mockDialog});
});
beforeEach(() => {
fixture = MockRender(CombinedMultiControlFormFieldComponent); <-------------
component = fixture.componentInstance;
component.formGroup = fg;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});
TS:
export class CombinedMultiControlFormFieldComponent {
@Input()
formGroup: FormGroup = new FormGroup({f1: new FormControl('')});
@Input()
displayLabel: string;
constructor(private dialog: MatDialog) {
}
}
编辑:我在下面的答案中提供了修复,尽管我仍然不太明白为什么会发生错误。
解决方案
仍然不太确定,为什么会发生这种情况,但是通过在MockRender
调用中提供 formGroup 作为参数,我能够摆脱错误。
beforeEach(() => {
fixture = MockRender(CombinedMultiControlFormFieldComponent, {formGroup: fg}); <-----
component = fixture.componentInstance;
fixture.detectChanges();
});
我仍然很想学习如何正确使用 ngMocks。因此,如果有人能解释为什么,请告诉我们:)
推荐阅读
- css - 如何使用 React 的样式组件将按钮集中在单击上?
- javascript - 单击时更新输入复选框,而不是在数据完成时更新
- vue.js - 使用 feathersjs 时如何使 vuejs 应用程序与 IE 11 一起工作
- python - /rest-auth/user/ 处的 RelatedObjectDoesNotExist:用户没有用户配置文件
- networking - 带有 pouchdb 的 Electron js 离线网络
- javascript - JS中的Nan问题
- python - 如何将我的训练数据输入到这个神经网络中
- c - 如何在不更改其值的情况下获取先前设置的警报的剩余时间?
- java - 将 ContextLoaderListener 添加到 web.xml 然后我的 jsp 页面出现 404 错误
- java - Java在没有X环境或服务的情况下模拟控制台中的多个按键