"CUSTOM_ELEMENTS_SCHEMA" Errors in Testing Angular 2 App

18,817

Solution 1

So what I had to do to get this working was also set the schemas in the TestBed.configureTestingModule - which is not a separate module file, but a part of the app.component.spec.ts file. Thanks to @camaron for the tip. I do think the docs could be a clearer on this point.

Anyway, this is what I added to get it to work. Here are the opening contents of my app.component.spec.ts file.

import { TestBed, async } from '@angular/core/testing';
import { AppComponent } from './../app.component';
import { RouterTestingModule } from '@angular/router/testing';
import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';

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

Solution 2

It works for me this way, in your spec.ts file you have to import your components and needs to add it to declarations. In my case its in about.component.spec.ts

import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { AboutComponent } from './about.component';
import { SidebarComponent } from './../sidebar/sidebar.component';
import { FooterComponent } from './../footer/footer.component';

describe('AboutComponent', () => {
  let component: AboutComponent;
  let fixture: ComponentFixture<AboutComponent>;

  beforeEach(async(() => {
    TestBed.configureTestingModule({
       declarations: [ AboutComponent, SidebarComponent, FooterComponent ]
    })
    .compileComponents();
  }));

  beforeEach(() => {
    fixture = TestBed.createComponent(AboutComponent);
    component = fixture.componentInstance;
    fixture.detectChanges();
  });

  it('should create', () => {
    expect(component).toBeTruthy();
  });
});
Share:
18,817
Muirik
Author by

Muirik

Updated on June 02, 2022

Comments

  • Muirik
    Muirik almost 2 years

    In writing tests for my Angular 2 app, I am running into these errors: the selectors we're using:

    "): AppComponent@12:35 'tab-view' is not a known element:
    1. If 'my-tab' is an Angular component, then verify that it is part of this module.
    2. If 'my-tab' is a Web Component then add "CUSTOM_ELEMENTS_SCHEMA" to the '@NgModule.schemas' of this component to suppress this message. ("
        </div>
        <div class="app-body">
            [ERROR ->]<tab-view class="my-tab" [options]="tabOptions"></tab-view>
        </div> </div> 
    

    I have added CUSTOM_ELEMENTS_SCHEMA to my root module, as well as all other modules, but I am still getting the errors.

    • What else do I need to do?
    • Does this need to be in all modules, or just the root?
    • Is there anything else I need to add?