Angular 2에서 테스트 할 때 TestBed 에서 비동기 기능을 언제 사용 합니까?
언제 사용합니까?
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();
});
});
여기에서 이것은 네이티브 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()
또한보십시오