angular cli:测试期间未知的选择器

时间:2017-02-25 13:32:29

标签: angular jasmine components selector angular-cli

我正在学习如何使用angular-cli对Angular 2进行首次测试。

当我创建新组件MyComponent时,将其选择器app-mycomponent添加到应用模板中,然后所有测试都失败并说明app-mycomponent未知。

此问题仅在测试中出现;如果我启动应用程序,那么一切都很好。

我的环境:

npm : 3.10.10
node : 6.9.5
angular-cli : 1.0.0-beta.32.3
jasmine-core: 2.5.2
protractor: 5.1.0

不是复制大量的配置文件,而是重现步骤:

  1. 创建一个新项目

    ng new testproj
    cd testproj
    
  2. 创建一个组件

    ng generate component mycomp
    
  3. 转到./src/mycomp/mycomp.component.ts并注明其选择器(应为app-mycomp

  4. 修改./src/app/component.html并添加以下行:

    <app-mycomp></app-mycomp>
    

    其中app-mycomp是您在步骤3中看到的选择器。

  5. 启动测试:

    ng test
    
  6. 然后在这里报告失败:

    Error: Template parse errors:
    'app-mycomp' is not a known element:
    1. If 'app-mycomp' is an Angular component, then verify that it is part of this module.
    2. If 'app-mycomp' is a Web Component then add "CUSTOM_ELEMENTS_SCHEMA" to the '@NgModule.schemas' of this component to suppress this message. ("
    {{title}}</h1>
    [ERROR ->]<app-mycomp></app-mycomp>"): AppComponent@3:0
    

    这是一个错误,还是我做错了什么?我已尝试将MyComponent手动设置为providerAppComponent,同样的问题。

1 个答案:

答案 0 :(得分:0)

感谢上面的评论我弄清楚出了什么问题: AppComponent测试模块并不知道如何使用MyComponent。加载测试时,我还不知道幕后发生了什么,无论如何,我们必须通过这种方式手动将所有组件依赖项指定到其测试中: 在app.module.spec.ts中,编辑调用TestBed.configureTestingModule的beforeEach方法。

之前

beforeEach(() => {
TestBed.configureTestingModule({
  declarations: [ AppComponent ],
});

之后:

beforeEach(() => {
TestBed.configureTestingModule({
  declarations: [
    AppComponent , 
    MyComponent
  ],
});