当前位置: 首页 > 知识库问答 >
问题:

Angular 2 Karma测试“组件名称”不是已知元素

韶浩皛
2023-03-14

在AppComponent中,我使用超文本标记语言代码中的导航组件。用户界面看起来不错。做ng服务时没有错误。当我查看应用程序时,控制台中没有错误。

但是当我为我的项目运行Karma时,有一个错误:

Failed: Template parse errors: 
'app-nav' is not a known element:
1. If 'app-nav' is an Angular component, then verify that it is part of this module.
2. If 'app-nav' is a Web Component then add 'CUSTOM_ELEMENTS_SCHEMA' to the '@NgModule.schemas' of this component to suppress this message.

在我的app.module.ts:

有:

import { NavComponent } from './nav/nav.component';

它也在NgModule的声明部分

@NgModule({
  declarations: [
    AppComponent,
    CafeComponent,
    ModalComponent,
    NavComponent,
    NewsFeedComponent
  ],
  imports: [
    BrowserModule,
    FormsModule,
    HttpModule,
    JsonpModule,
    ModalModule.forRoot(),
    ModalModule,
    NgbModule.forRoot(),
    BootstrapModalModule,
    AppRoutingModule
  ],
  providers: [],
  bootstrap: [AppComponent]
})

我在我的AppComponent中使用NavComponent

应用程序组件.ts

import { Component, ViewContainerRef } from '@angular/core';
import { Overlay } from 'angular2-modal';
import { Modal } from 'angular2-modal/plugins/bootstrap';
import { NavComponent } from './nav/nav.component';

@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.css']
})
export class AppComponent {
  title = 'Angela';
}

app.component.html

<app-nav></app-nav>
<div class="container-fluid">
</div>

我看到过一个类似的问题,但该问题的答案是,我们应该在导航组件中添加NgModule,该组件中有一个导出,但我这样做时会遇到编译错误。

还有:app.component.spec.ts

import {NavComponent} from './nav/nav.component';
import { TestBed, async } from '@angular/core/testing';
import { AppComponent } from './app.component';

共有3个答案

宋伟泽
2023-03-14

对我来说,在父级中导入组件解决了问题。

describe('AppComponent', () => {
  beforeEach(async(() => {
      TestBed.configureTestingModule({
        declarations: [
          AppComponent,
          NavComponent
        ]
      }).compileComponents();
    }));

在使用此组件的父级的规范中添加此项。

邴星洲
2023-03-14

您还可以使用NO_ERRORS_SCHEMA

describe('AppComponent', () => {
beforeEach(async(() => {
  TestBed.configureTestingModule({
    declarations: [
      AppComponent
    ],
    schemas: [NO_ERRORS_SCHEMA]
  }).compileComponents();
}));

https://2018.ng-conf.org/mocking-dependencies-angular/

昌琪
2023-03-14

因为在单元测试中,您希望测试与应用程序的其他部分基本隔离的组件,Angular默认不会添加模块的依赖项,如组件、服务等。因此,您需要在测试中手动执行此操作。基本上,您在这里有两个选项:

describe('AppComponent', () => {
  beforeEach(async(() => {
      TestBed.configureTestingModule({
        declarations: [
          AppComponent,
          NavComponent
        ]
      }).compileComponents();
    }));
describe('AppComponent', () => {
  beforeEach(async(() => {
      TestBed.configureTestingModule({
        declarations: [
          AppComponent,
          MockNavComponent
        ]
      }).compileComponents();
    }));

// it(...) test cases 

});

@Component({
  selector: 'app-nav',
  template: ''
})
class MockNavComponent {
}

您可以在官方文档中找到更多信息。

 类似资料:
  • 我正在尝试在其他模块中使用我在AppModule内部创建的组件。但我得到了以下错误: msgstr"未捕获(promise中):错误:模板解析错误: “联系人框”不是已知元素: 如果“触点盒”是一个角度组件,则确认它是该模块的一部分 如果“联系人框”是Web组件,则将“自定义元素”模式添加到“@NgModule”。“此组件的架构”以抑制此消息 我将我的页面保存在页面目录中,其中每个页面保存在不同的

  • 我正在从Angular.io学习这个教程 正如他们所说,我创建了hero.spec.ts文件来创建单元测试: 找不到名称“Expect”。 我该怎么做才能修好它?

  • 问题内容: 我在此站点上看到了一些东西: 用JavaScript和PHP处理HTML表单元素数组 http://www.ajaxprojects.com/ajax/tutorialdetails.php?itemid=343 它说过将数组放在name属性中,以及如何获取输入集合的值。例如 但据我所知,HTML input元素已通过数组就绪。例如,在客户端()或服务器端(在PHP或ASP.NET中)

  • 时常组件在运行的时候需要配置你的步骤使用步骤并且迟绑定注入上下文从步骤或者是任务执行。这些是机警的测试像单独的组件除非你有一个办法设置上下文就像他们在一个步骤里执行。那是两个组件的目标在spring batch中:StepScopeTestExecutionListener 和 StepScopeTestUtils 这个监听是公开的在类级别中,它的工作是创建一个步骤为每个测试方法执行上下文。例如:

  • 本文向大家介绍AngularJS 单元测试组件(1.5+),包括了AngularJS 单元测试组件(1.5+)的使用技巧和注意事项,需要的朋友参考一下 示例 组件代码: 考试: 跑!

  • 问题内容: 在AppComponent中,我在HTML代码中使用了nav组件。用户界面看起来不错。服务时没有错误。当我查看应用程序时,控制台中没有错误。 但是,当我为我的项目运行Karma时,出现了一个错误: 在我的 app.module.ts中 : 有: 它也在NgModule的声明部分中 我在我的 app.component.ts app.component.html 我已经看到了类似的问题,