[Angular 单元测试]:如何在单元测试中模拟 QueryList(无集成测试)

Ric*_*cky 3 unit-testing mocking jasmine angular angular-content-projection

在内容投影场景中,我有以下场景:

// my-component.ts
 @ContentChildren(SelectOption) selectOptions: QueryList<SelectOption>;

...
ngAfterContentInit() {
    this.selectOptions.forEach((selectOption, i) => {
       selectOption.index = i;
    });
}
Run Code Online (Sandbox Code Playgroud)

假设模板具有以下结构:

<ng-content select="select-option"></ng-content>
Run Code Online (Sandbox Code Playgroud)

我尝试通过以下方式模拟测试,但找不到允许我添加子组件的“添加”方法。

// my-component.spec.ts
component.selectOptions = {} as QueryList<SelectOption>;
Run Code Online (Sandbox Code Playgroud)

但我不知道如何在单元测试场景(不是集成测试)中添加预计的组件

小智 7

使用 Object.assign() 如下所示:

Object.assign(new QueryList(), {_results: [selectOptionMock1, selectOptionMock2, selectOptionMock3]}) as QueryList<SelectOption>;
Run Code Online (Sandbox Code Playgroud)