Жасмин пытается прочитать свойство, которое не существует - PullRequest
0 голосов
/ 17 октября 2019

У меня очень простой компонент:

import { Component } from '@angular/core';

@Component({
    selector: 'loading',
    templateUrl: './loading.component.html',
    styleUrls: ['./loading.component.scss']
})
export class LoadingComponent {
}

, который просто отображает логотип статической загрузки. Нет интерактивности вообще. Я написал тест только для проверки его реализации:

import { async, ComponentFixture, TestBed } from '@angular/core/testing';

import { LoadingComponent } from './loading.component';

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

    beforeEach(async(() => {
        TestBed.configureTestingModule({
            declarations: [ LoadingComponent ]
        })
        .compileComponents();
    }));

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

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

В Firefox этот тест выдает ошибку: j is undefined, а в браузерах Chromium я вижу Cannot read property 'startTime' of undefined. Шаблон просто:

Sample Text

, чтобы выяснить, что происходит. Так что в этих трех файлах нигде не упоминается «startTime» - что происходит ??

Примечание

Я использую startTime свойства в других компонентах, но не могу понятькак / почему это будет иметь значение.

Редактировать

Мне удалось устранить эту ошибку, просто добавив:

afterAll(() => {
    TestBed.resetTestingModule();
});

к каждому тесту впроект. Я оставляю вопрос открытым, потому что понятия не имею:

  1. Почему это работает / какова была основная проблема
  2. Если я качаю более тяжелый топор, чем мне нужно -Достаточно ли добавить его только к одному тесту?

1 Ответ

0 голосов
/ 18 октября 2019

Ошибка, которую вы видите, определенно не связана с опубликованным вами компонентом и файлом спецификации. Ошибка, которую вы видите, скорее всего, исходит от компонента, выполняющего асинхронную операцию, и ошибка возникает после того, как спецификация, в которой он создан, уже завершила работу.

Прежде всего, поместите f перед описанием этого файла спецификации. .

fdescribe('LoadingComponent', () => {

Это заставит специалиста запускать только этот файл. Вы увидите, что он проходит нормально.

Затем вы хотите удалить f и выполнить поиск вашего проекта по startTime, попробуйте запустить спецификации для компонентов, которые используют свойство startTime по одному.

Если вы не можете найти его, тогда ставьте x перед описанием их по одному, в конце концов вы найдете, какой из них вызывает ошибку, поскольку этого не произойдет, если у вас есть x в спецификации, которая вызывает ошибку.

Любые спецификации, выполняющие асинхронную функцию, должны использовать асинхронную функцию, чтобы она ожидала завершения всех асинхронных операций, прежде чем перейти к следующей спецификации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...