Async beforeEach завершается до / после каждого тестового блока (it) - PullRequest
0 голосов
/ 18 октября 2018

Привет, я новичок в тестах в angular 6 (он же угловой), и у меня есть одна проблема - пересматривать каждый тест, который я видел до сих пор.

Давайте сначала посмотрим на простой тест простого компонента (который сгенерировалby cli)

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

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

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

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

У меня есть один главный вопрос:

1.Как я точно знаю, что каждый вызов Async beforeEach выполняется перед каждым тестовым модулем (иначе)?есть ли случаи, когда этот вызов будет происходить после каждого, потому что это асинхронный вызов в конце концов?

1 Ответ

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

Каждый 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-тестирование Асинхр-функция с вызовом, когда в использовании

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