angular / angular/angular-cli

Schematics for Component spec should use test host component when created with `-cd OnPush`

未关闭
#10,482 2 条评论 5 个 reaction 已指派 0 人 在 GitHub 查看
area: @schematics/angular feature feature: insufficient votes
主要语言
TypeScript
星标
27k
派生
11.8k
平均合并
14 小时 23 分钟
30 天内合并 PR
162

描述

### Versions
```
Angular CLI: 1.7.3
Node: 8.9.1
OS: win32 x64
Angular: 5.2.1
... animations, common, compiler, compiler-cli, core, forms
... http, language-service, platform-browser
... platform-browser-dynamic, platform-server, router

@angular/cli: 1.7.3
@angular-devkit/build-optimizer: 0.3.2
@angular-devkit/core: 0.3.2
@angular-devkit/schematics: 0.3.2
@ngtools/json-schema: 1.2.0
@ngtools/webpack: 1.10.2
@schematics/angular: 0.3.2
@schematics/package-update: 0.3.2
typescript: 2.4.2
webpack: 3.11.0
```

### Repro steps
* `ng generate component test -cd OnPush`
* Edit the test.component.html to be
```
{{ checkMe() }}
```
* Add the checkMe method to test.component.ts:
```TypeScript
checkMe() {
console.log('change detection was invoked!');
}
```
* Edit the generated .spec file to include the following test:
```TypeScript
fit('runs change detection', () => {
fixture.detectChanges();
fixture.detectChanges();
fixture.detectChanges();
});
```
* Run unit test

### Observed behavior

'change detection was invoked!' is logged only once (the initial check on creation of the component) rather than 4 times. That is to say, invoking `fixture.detectChanges()` does not actually run change detection. This is a known issue and is discussed in https://github.com/angular/angular/issues/12313
```
LOG: 'change detection was invoked!'
Chrome 65.0.3325 (Windows 10 0.0.0): Executed 1 of 478 SUCCESS (0 secs / 0.138 secs)
```

### Desired behavior

As discussed in the thread linked above, the solution for testing OnPush components is to use the "test host component" pattern as described in the [angular.io testing docs](https://angular.io/guide/testing#component-inside-a-test-host).

Therefore, the Angular CLI should use a schematic which uses the test host component when the `-cd OnPush` flag has been used. Otherwise we get a default test setup which is not fit for purpose (and will cause many wasted hours for devs like me 😓)

贡献指南

打开贡献指南

调研方向

运行 `ng generate component test -cd OnPush`,检查生成的组件文件和 `.spec` 文件,重点关注 Angular component schematic 如何设置测试。以链接的 Angular 测试指南作为上下文,然后验证生成的测试使用了测试宿主组件模式,并且重复调用 `fixture.detectChanges()` 会触发变更检测。

由索引模型根据 Issue 内容生成。

评估

技术栈
angular, typescript
领域
testing, tooling
Issue 类型
缺陷
难度
3/5
预计耗时
1-2 天
活跃度
停滞
描述清晰度
基本清楚
新手友好度
35/100

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。