我从Tour of Heroes
开始使用标准的Angular / systemjs。现在我正在使用angular-client
,它在dev / prod模式下运行顺畅。但我无法使用ng test
测试任何内容。以下内容会被吐出(不仅适用于test.ts
,还适用于polyfills.ts
)。
code: 'ENOENT',
errno: 34,
message: 'no such file or directory',
path: '/_karma_webpack_/src/test.ts' }
当我使用ng
开始一个空白项目时,我无法跟踪它,只要我将一些组件放入app-routing.module.ts
发生错误。很确定,我错过了一些非常明显的东西,所以我提前为此道歉。
如果真的喜欢深入研究代码(或尝试运行测试):https://github.com/ckpinguin/angular-tour-of-heroes
其他信息:在出现上述错误之前,每个组件都会失败并显示相应的消息。我不知道为什么,因为我可以顺利运行应用程序。
ERROR in ./src/app/heroes/hero-list.component/hero-list.component.ts
Module build failed: TypeError: Cannot read property 'getChildAt' of undefined
at refactor.findAstNodes.filter.forEach (/home/axcka01/projects/angular/tour-of-heroes/node_modules/@ngtools/webpack/src/loader.js:221:54)
at Array.forEach (native)
at _removeModuleId (/home/axcka01/projects/angular/tour-of-heroes/node_modules/@ngtools/webpack/src/loader.js:215:10)
at Promise.resolve.then.then (/home/axcka01/projects/angular/tour-of-heroes/node_modules/@ngtools/webpack/src/loader.js:298:33)
at process._tickCallback (internal/process/next_tick.js:103:7)
@ ./src/app/app.module.ts 19:30-89
@ ./src/main.ts
@ multi ./src/main.ts
答案 0 :(得分:0)
好的,所以我查看了我的Angular书并发现,必须在spec.ts
中声明所有(隐式)使用的组件。当我使用app.component.spec.ts
测试中央主组件时,这意味着使用它:
TestBed.configureTestingModule({
imports: [
RouterTestingModule
],
declarations: [ // TODO: Mock some components!
AppComponent, HeroListComponent, HeroDetailComponent,
DashboardComponent, HeroSearchComponent, HeroAddComponent
],
}).compileComponents()
...而不仅仅是声明中的AppComponent
!
所以错误只不过是业力的(令人困惑的)说:“我需要加载组件,但不能使用它们,因为它们在这个测试用例中没有声明。”(请如果我错了,请纠正我。
我知道,通常不应该测试所有子组件的“所有组件的母亲”。相反,人们只会测试最小的集合或使用模拟。但是由于app.component.spec.ts
的上述变化,vanilla ng-cli测试案例至少现在已经开始。