programing

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

yoursource 2023. 7. 26. 22:48
반응형

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

Angular 2에서 테스트할 때 Test Bed에서 비동기 기능을 사용하는 경우는 언제입니까?

이것은 언제 사용합니까?

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

그리고 이것은 언제 사용하나요?

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

누가 이것에 대해 가르쳐 줄 수 있습니까?

async다음 테스트는 다음 테스트가 시작될 때까지 허용하지 않습니다.async모든 작업을 마칩니다.무엇을async는 모든 비동기 작업(예: 영역)에서 콜백을 래핑합니다.setTimeout)이 추적됩니다.모든 비동기 작업이 완료되면,async완료합니다.

만약 당신이 Angular 밖에서 Jasmine과 함께 일한 적이 있다면, 당신은 아마도 본 적이 있을 것입니다.done콜백으로 전달됨

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

자, 여기는 자스민 원주민입니다. 자스민에게 이 테스트는 우리가 전화를 할 때까지 완료를 연기해야 한다고 말합니다.done()우리가 전화하지 않았다면.done()대신 이렇게 했습니다.

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

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

Angular(Jasmine 환경에서)를 사용하면 Angular가 실제로 호출합니다.done을 사용할 때는 뒤에서async영역에 있는 모든 비동기 작업을 추적하고 모든 작업이 완료되면done뒤에서 호출될 것입니다.

당신의 경우에는.TestBed구성, 당신은 당신이 원할 때 이것을 일반적으로 사용할 것입니다.compileComponents저는 그것을 다르게 불러야 하는 상황에 거의 마주치지 않습니다.

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

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

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

사용 시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()테스트 프레임워크가 완료된 것으로 처리하기 전에 약속 및 관찰 가능한 항목이 완료될 때까지 기다려야 한다는 것을 인식시킵니다.

참고 항목

언급URL : https://stackoverflow.com/questions/40126729/angular-2-testing-async-function-call-when-to-use

반응형