Каждый beforeEach
завершится до начала любого теста.
В вашем примере compileComponents()
является асинхронным.Таким образом, мы должны использовать метод async () в этом случае.
для справки, перейдите по этой ссылке: https://github.com/angular/angular-cli/issues/4774
, чтобы быть уверенным, что ваш beforeEach
завершится до начала любого тестаначинается, вы можете попытаться отладить свой тест, добавив следующее:
compileComponents().then( result => {
console.log(result);
}
Вы можете установить точку останова в этой строке: console.log(result);
, и вы увидите, что она будет выполняться при каждом запуске теста, поэтому, если вы установите точку останова в этой console.log' line and another one in your firt
it test, you will see you will never get to the second break point before doing the
console.log` точке останова 1, это означает, что нам придется ждать любого асинхронного вызова внутри beforeEach перед тем, как перейти к любому тесту.
Еще один способ увидеть, что beforeEach
все время закончится до начала любого теста, - написать свой тест также следующим образом:
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [ CompComponent ]
}).compileComponents().then( result => {
fixture = TestBed.createComponent(CompComponent);
component = fixture.componentInstance;
}
}));
Вы увидите, что в любом изтвой тест fixture
уже доступен, вот так.Поэтому вам не нужно добавлять другой beforeEach для инициализации fixture
.
. Чтобы понять больше, вы можете обратиться к этому другому ответу из Переполнения стека:
угловое-2-тестирование Асинхр-функция с вызовом, когда в использовании