Angular: тестирование компонентов с токенами инъекции в конструкторе - PullRequest
0 голосов
/ 02 марта 2020

У меня есть компонент angular, который использует токен инъекции для получения данных из Angular -материала.

export class DialogComponent implements OnInit
{
    public userEmail: string;

    constructor(private dialogService: DialogService, @Inject(MAT_DIALOG_DATA) data) 
    {
        this.userEmail = data.data.userEmail;
    }
    ...
}

Я пытаюсь запустить модульные тесты для этого компонента, но у меня возникли различные ошибки. Я уже посмотрел эти сообщения ...

Angular Материал и Жасмин: "Нет поставщика для InjectionToken MdDialogData!"

Angular Тестирование - Mocking An InjectionToken

Angular проблемы с инжекцией компонентов

... но ни один не предоставил работающего решения, которое я ищу, чтобы устранить ошибку I вижу для моего самого базового c модульного теста. Я получал то же сообщение об ошибке, что и в первом сообщении, но решение в рамках этой ошибки исправило эту ошибку, предоставив мне текущую ошибку Тест и связанные с ним провайдеры и блок beforeEach ...

providers: [
    DialogService,
    { provide: MAT_DIALOG_DATA, useValue: {} },
    { provide: MatDialogRef, useValue: {} }
]

...

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

...

it('should create', () =>
{
    expect(component).toBeTruthy();
});

... И затем я вижу ошибку ...

TypeError: Cannot read property 'userEmail' of undefined

Я не понимаю здесь, и если кто-нибудь знает, что, я был бы признателен, если бы вы могли объяснить мне, что происходит.

РЕДАКТИРОВАТЬ: я забыл добавить в исходное сообщение, что после отладки кода тестирования, переменная "component" также не определена.

Angular: v7.3.8 Angular -Материал: v6.4.7

...