Моя цель - создать модульный тест, используя 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()
// );