[angular] Angular 2 테스트-비동기 함수 호출-사용시기

Angular 2에서 테스트 할 때 TestBed 에서 비동기 기능을 언제 사용 합니까?

언제 사용합니까?

 beforeEach(() => {
        TestBed.configureTestingModule({
            declarations: [MyModule],
            schemas: [NO_ERRORS_SCHEMA],
        });
    });

그리고 언제 이것을 사용합니까?

beforeEach(async(() => {
    TestBed.configureTestingModule({
        declarations: [MyModule],
        schemas: [NO_ERRORS_SCHEMA],
    });
}));

누구든지 이것에 대해 나를 깨달을 수 있습니까?



답변

asyncasync모든 작업 이 완료 될 때까지 다음 테스트가 시작되는 것을 허용하지 않습니다 . 어떤 async일은 모든 비동기 작업이 (예를 들면 지역에 콜백을 포장입니다 setTimeout) 추적됩니다. 모든 비동기 작업이 완료 async되면 완료됩니다.

Angular 외부에서 Jasmine으로 작업 한 적이 있다면 done콜백으로 전달되는 것을 보았을 것입니다.

it('..', function(done) {
  someAsyncAction().then(() => {
    expect(something).toBe(something);
    done();
  });
});

여기에서 이것은 네이티브 Jasmine입니다. 여기에서 Jasmine에을 호출 할 때까지이 테스트가 완료를 지연해야한다고 말합니다 done(). 전화 done()를하지 않고 대신 이렇게했다면 :

it('..', function() {
  someAsyncAction().then(() => {
    expect(something).toBe(something);
  });
});

테스트가 동기 작업 실행을 마친 후에 약속이 해결되기 때문에 예상보다 먼저 테스트가 완료됩니다.

(재스민 환경에서) 각도로, 각도가 실제로 호출 done우리가 사용할 때 뒤에서 async. Zone의 모든 비동기 작업을 추적하고 작업이 모두 완료되면 done배후에서 호출됩니다.

TestBed구성 과 관련된 특정 경우에는 일반적으로 compileComponents. 그렇지 않으면 전화해야 할 상황에 거의 맞지 않습니다.

beforeEach(async(() => {
   TestBed.configureTestingModule({
     declarations: [MyModule],
     schemas: [NO_ERRORS_SCHEMA],
   })
   .compileComponent().then(() => {
      fixture = TestBed.createComponent(TestComponent);
   });
}));

사용하는 구성 요소를 테스트 할 때 templateUrl(웹팩을 사용하지 않는 경우) Angular는 템플릿을 가져 오기 위해 XHR 요청을해야하므로 구성 요소 컴파일이 비동기 적입니다. 따라서 테스트를 계속하기 전에 문제가 해결 될 때까지 기다려야합니다.


답변

테스트에서 비동기 호출을 할 때 실제 테스트 함수는 비동기 호출이 완료되기 전에 완료됩니다. 호출이 완료되었을 때 일부 상태를 확인해야하는 경우 (일반적으로) 테스트 프레임 워크는 여전히 비동기 작업이 진행되는 동안 테스트가 완료된 것으로보고합니다.

using async(...)을 사용 하면 테스트가 완료된 것으로 처리하기 전에 반환 약속 또는 관찰 가능 항목이 완료 될 때까지 기다리도록 테스트 프레임 워크에 지시합니다.

it('should show quote after getQuote promise (async)', async(() => {
  fixture.detectChanges();

  fixture.whenStable().then(() => { // wait for async getQuote
    fixture.detectChanges();        // update view with quote
    expect(el.textContent).toBe(testQuote);
  });
}));

전달 된 코드 는 테스트 기능 자체가 완료된 후에then(...) 실행 됩니다. 으로 당신이 완료된 것으로 테스트를 치료하기 전에 완료 할 약속과 관찰 가능한 기다릴 필요가, 테스트 프레임 워크를 인식합니다.async()

또한보십시오


답변