Я новичок в угловых испытаниях, и мой вопрос может быть частью «лучшей практики в угловых испытаниях».
Я ищу способ включить наименьший модуль в тестирование и перезаписать какую-то часть, которая мне надо мной издевалась.
Допустим, у меня есть компонент кнопки, которому нужен маршрутизатор для работы.Его модуль выглядит так:
import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { MyButtonComponent } from './mybutton.component';
import { Router } from '@angular/router';
@NgModule({
imports: [
CommonModule,
],
declarations: [
MyButtonComponent,
],
exports: [
MyButtonComponent,
],
providers: [
Router,
]
})
export class MyButtonModule { }
Теперь я хочу протестировать его следующим образом:
import { TestBed, ComponentFixture } from '@angular/core/testing';
import { MyButtonModule } from './viewer-button.module';
import { RouterTestingModule } from '@angular/router/testing';
// Tests Begining
describe('ViewerButtonComponent', () => {
let component: MyButtonComponent;
let fixture: ComponentFixture<MyButtonComponent>;
beforeEach(() => {
TestBed.configureTestingModule({
imports: [
ViewerButtonModule,
RouterTestingModule.withRoutes([]),
],
})
.compileComponents();
fixture = TestBed.createComponent(MyButtonComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('#should create the component', () => {
expect(component).toBeTruthy(' fail at creation');
});
});
Но Router
не имеет перевеса при импорте RouterTestingModule
.(получил ошибку Can't resolve all parameters for Router: (?, ?, ?, ?, ?, ?, ?, ?).
)
Я знаю, что лучший способ для этого примера - объявить MyButtonComponent, а затем импортировать RouterTestingModule, но я спрашиваю, есть ли способ сделать это с большим компонентом без NO_ERRORS_SCHEMA
мелкая вещь.
Например:
beforeEach(() => {
TestBed.configureTestingModule({
imports: [
// my childs component module
MyChildComponentModule1,
MyChildComponentModule2,
...
MyChildComponentModuleX,
//the modules that mock what needed (or use custom mock in the providers part)
RouterTestingModule,
HttpClientTestingModule,
....
SomethingTestingModule
],
})
.compileComponents();
fixture = TestBed.createComponent(MyButtonComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});