Недавно созданный компонент Angular и модульный тест не работают с Jest Test Runner только при использовании Testbed

Моя цель - создать модульный тест, используя Testbed, предоставленный Angular Core. Я использую Jest Test Runner (синтаксис похож на Jasmine) для модульного тестирования.

Ожидается:
Я ожидал, что после того, как CLI сгенерирует компонент и связанный с ним модульный тест, модульный тест пройдет (см. Компонент и модульный тест для минимального воспроизводимого примера ниже).

Фактически:
На самом деле я получил две ошибки (см. Ошибки ниже). Эти ошибки показывают мне, что компонент не создается вовремя для теста.

Вещи, которые я пробовал:
Мой предыдущий вопрос показывает историю того, что я пробовал до сих пор. Это началось с первого, что я попробовал, а именно добавления запуска тестовой среды в настройку. Файл. Это только что привело к Can't resolve all parameters for ApplicationModule: (?).. Вы можете перейти к этому тикету, если вас интересует захватывающая дискуссия, связанная с этим. Что касается этой попытки ... 1. Вторая серьезная попытка после вышеизложенного ведет к следующим шагам. Я попытался обернуть вызов beforeEach Testbed в асинхронную функцию.
2. Это просто приводит к ошибке ProxyZoneSpec is needed for the async() test helper but could not be found. После этого вы добавляете import 'zone.js/dist/proxy.js'; в свой установочный файл.
3. Это приводит к ошибке Expected to be running in 'ProxyZone', but it was not found. После этого вы найдете несколько сообщений SO ​​один из которых предлагает вам использовать fakeAsync вместо async, так что попробуйте это. На этот раз ошибка не изменится. Тест все еще не проходит.


Это сообщение можно было также назвать:

Использование Testbed для тестирования Angular Unit - BeforeEach, завернутый в Async, вызывает ошибку: Ожидается, что он будет запущен в ProxyZone, но не был найден.
Но я считаю, что начинать с твердой почвы с MRE, где CLI оставляет вас, лучше всего, поскольку это ДОЛЖНО работать, но не работает. Во всяком случае, мне интересно, где я здесь заблудился. Если у вас есть что-нибудь, я могу попробовать, я все уши. Спасибо за помощь. Пожалуйста, дайте мне знать, если мне что-то не хватает, чтобы я мог исправить это сообщение.



Компонент

@Component({
  selector: 'app-geode-lib',
  template: `  `,
})
export class GeodeLibComponent implements OnInit {
  constructor() { }
  ngOnInit() { }
}

Модульный тест

describe('GeodeLibComponent', () => {
  let component: GeodeLibComponent;
  let fixture: ComponentFixture<GeodeLibComponent>;
  beforeEach(() => {
    TestBed.configureTestingModule({
      schemas: [NO_ERRORS_SCHEMA],
      declarations: [GeodeLibComponent]
    });
    fixture = TestBed.createComponent(GeodeLibComponent);
    component = fixture.componentInstance;
  });
  it('can load instance', () => {
    expect(component).toBeTruthy();
  });
});

ОШИБКА1

 FAIL  projects/geode-lib/src/lib/geode-lib.component.spec.ts
  ● GeodeLibComponent › can load instance

    TypeError: Cannot read property 'getComponentFromError' of null

      at TestBedViewEngine._initIfNeeded (../../packages/core/testing/src/test_bed.ts:378:46)
      at TestBedViewEngine.createComponent (../../packages/core/testing/src/test_bed.ts:570:10)
      at Function.TestBedViewEngine.createComponent (../../packages/core/testing/src/test_bed.ts:232:36)
      at Object.beforeEach (projects/geode-lib/src/lib/geode-lib.component.spec.ts:12:23)

  ● GeodeLibComponent › can load instance

    expect(received).toBeTruthy()

    Received: undefined

      14 |   });
      15 |   it('can load instance', () => {
    > 16 |     expect(component).toBeTruthy();
         |                       ^
      17 |   });
      18 | });
      19 | 

      at Object.it (projects/geode-lib/src/lib/geode-lib.component.spec.ts:16:23)

ERROR2

// getTestBed().initTestEnvironment(
//     BrowserDynamicTestingModule,
//     platformBrowserDynamicTesting()
// );

person imnickvaughn    schedule 12.05.2020    source источник
comment
нет ничего плохого в коде, который вы показываете. Подскажите, как настраивали jest? также версия angular, которую вы используете.   -  person satanTime    schedule 14.05.2020