Как мокнуть компонент

432
08 августа 2017, 17:43

В общем есть компонент на angular4 написал для него тест замокал сервисы, все было норм, теперь добавляю внутри этого компонента вызов другого

 <app-user-filter></app-user-filter>

получаю ошибку

Failed: Template parse errors:
'app-user-filter' is not a known element:
1. If 'app-user-filter' is an Angular component, then verify that it is part of this module.
    import {async, ComponentFixture, TestBed} from '@angular/core/testing';
import {UserComponent} from '../user.component';
import {NgxPaginationModule} from 'ngx-pagination';
import {UserService} from '../user.service';
import {MockUserService} from './mockObjects/MockUserService';
import {ActivatedRoute} from '@angular/router';
import {MockActivatedRoute} from './mockObjects/MockActivatedRoute';
import set = Reflect.set;
describe('UserComponent', () => {
    let component: UserComponent;
    let fixture: ComponentFixture<UserComponent>;
    beforeEach(async(() => {
        TestBed.configureTestingModule({
            declarations: [UserComponent],
            imports: [
                NgxPaginationModule
            ]
        }).overrideComponent(UserComponent, {
            set: {
                providers: [
                    {provide: UserService, useClass: MockUserService},
                    {provide: ActivatedRoute, useClass: MockActivatedRoute}
                ]
            }
        })
            .compileComponents();
    }));
    beforeEach(() => {
        fixture = TestBed.createComponent(UserComponent);
        component = fixture.componentInstance;
        fixture.detectChanges();
    });
    it('should be created', () => {
        fixture.detectChanges();
        expect(component).toBeTruthy();
    });
});
Answer 1

Можно создать пустой компонент прямо в тесте:

@Component({
    selector: "app-user-filter",
    template: ""
})
class FilterStubComponent{}
<...>
TestBed.configureTestingModule({
  declarations: [
    UserComponent
    FilterStubComponent
  ]
<...>

Альтернативный вариант - просто игнорировать такие ошибки (подробнее):

import { NO_ERRORS_SCHEMA }          from '@angular/core';
...
beforeEach( async(() => {
  TestBed.configureTestingModule({
    declarations: [ UserComponent ],
    schemas:      [ NO_ERRORS_SCHEMA ]
  })
<...>
READ ALSO
Грамотный onUnLoad

Грамотный onUnLoad

Событие onUnLoad возникает если пользователь покидает страницуНо к сожалению это поддерживается не во всех браузерах

243
Выведение информационного сообщения

Выведение информационного сообщения

Как вывести информационное сообщение после отправки формы заказа на сервер? Возможно ли это средствами WooCommerce

294
MaterializeCSS datetime picker

MaterializeCSS datetime picker

ЗдравствуйтеПытаюсь сделать datetime picker для MaterializeCSS, поскольку нативного нет

382
Подключение JS к MySQL

Подключение JS к MySQL

Мне нужно подключить JS к MySQLТо есть с помощью javascript добавлять, считывать или удалять элементы таблици в MySQL

322