angular-cli:Karma-Webpack保释'没有这样的文件或目录'

时间:2017-03-07 12:40:18

标签: javascript angularjs karma-runner

我从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

1 个答案:

答案 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测试案例至少现在已经开始。