1

我在 parent.component.ts 文件中有以下代码,我在其中使用 @ViewChildren 作为 QueryList 访问子网格。

@ViewChildren(ChildComponent) childComponent: QueryList<any>;

我在像这样访问 childComponent 属性的组件中具有以下功能。

checkProperty() { 
 let isNewRow = this.childComponent[_results].some(
   item => item.newRowCreated === true
 )
 if(isNewRow) { 
  this.newRowEnabled = true;
 }
}

在为 checkProperty() 方法编写 jasmine 测试时,我为此创建的模拟数据抛出错误,我无法测试此方法。请找到测试用例代码。

it('test checkProperty() method', () => {
  component.childComponent = {
    changes: {},
    first: {},
    last: {},
    length: 1,
    dirty: false,
    _results: [{newRowCreated: true}]
  }
  fixture.detectChanges();
  component.checkProperty();
  expect(component.newRowEnabled).toBe(true);
});
   

此代码在规范文件中模拟 childComponent 的地方引发错误。我收到以下错误。

Type 'changes: {},first: {},last: {},length: 1,dirty: false,_results: [{newRowCreated: true}' is missing the following properties form type QueryList<any>: map,filter, find, reduce and 7 more.

这是将 childComponent 模拟为 QueryList 的正确方法吗?请帮助解决这个问题。

4

1 回答 1

0

要模拟事物,您可以使用ng-mocks

它支持模拟子组件,@ViewChildrenhttps ://ng-mocks.sudo.eu/guides/view-child等。

所以你可以尝试这样的事情:

beforeEach(() => TestBed.configureTestingModule({
  declarations: [
    ParentComponent,
    // Mocking the child component
    MockComponent(ChildComponent),
  ],
}));

it('test checkProperty() method', () => {
  // changing properties of the child component
  ngMocks.findInstance(ChildComponent).newRowCreated = true;

  // triggers and assertions
  fixture.detectChanges();
  component.checkProperty();
  expect(component.newRowEnabled).toBe(true);
});
于 2021-07-19T18:12:05.737 回答