typemoq
의 this question과 비슷하게 ts-mockito 개의 물체를 각도의 TestBed.configureTestingModule()
에 어떻게 주입 할 수 있습니까? 내가 찾을 수있는 모든 example ts-mockito 테스트는 각도와 무관합니다.각도 4 부품 테스트에 ts-mockito를 주입하는 방법
우리가 조롱하고있는 백엔드에 과 함께 ProgressComponent
을 포함하는 다음 minmal 작업 예제를 고려해보십시오. 이 서비스는 매우 간단하다 :
import { Injectable } from '@angular/core';
@Injectable()
export class ProgressService {
private currentState: string = '1';
constructor() {
}
setCurrentState(state: string) {
this.currentState = state;
}
getCurrentState(){
return this.currentState
}
}
ts-mockito
없이 조롱하기 위해, 우리는 단순히 클래스를 확장합니다. ProgressComponent
을 테스트 할 때
import {ProgressService} from "../../../progress.service";
export class MockProgressService extends ProgressService{}
그리고는 다음의 MockProgressService
는 테스트 베드에 전달됩니다.
import {async, ComponentFixture, getTestBed, TestBed} from '@angular/core/testing'
import { ProgressComponent } from './progress.component'
import {ProgressService} from "../progress.service"
import {MockProgressService} from "../shared/services/progress/progress.mock";
describe('ProgressComponent',() => {
let injector: TestBed
let mockService: ProgressService
let fixture: ComponentFixture<ProgressComponent>
let component: ProgressComponent
beforeEach(async() => {
TestBed.configureTestingModule({
declarations: [ ProgressComponent ],
providers: [{provide: ProgressService, useClass: MockProgressService}]
}).compileComponents()
injector = getTestBed()
fixture = TestBed.createComponent(ProgressComponent)
component = fixture.componentInstance
mockService = injector.get(ProgressService)
fixture.detectChanges();
});
});
각도 테스트 워크는 TestBed
통해 의존성 주입을 도입한다. 각도 테스트 설정에서 mockito를 어떻게 사용할 수 있습니까? 예를 들어, injector.get(ProgressService)
스 니펫을 ts-mockito 모의와 호환 가능하게 만들 수 있습니까?
'class MockProgressService extends ProgressService'는별로 의미가 없으므로 ts-mockito 객체의 문제점은 무엇인지 명확하지 않습니다. 'useValue : ...'또는'useFactory :() => ... '를 사용하여 원하는 객체로 서비스를 조롱 할 수 있습니다. – estus
각도 튜토리얼은 조롱중인 실제 클래스를 확장하여 모의 객체를 만듭니다. 따라서 MockProgressService는 단지 ProgressService를 확장하고 있습니다 (이 경우 메소드를 덮어 쓰지 않습니다). 그래서 useClass isntead, useValue는 수동으로 인스턴스화 한 mockito 객체에 대한 참조입니까? –
예, 그렇습니다. 나는 그 튜토리얼의 요점은 무엇인지 모르겠다. 그러나 일반적으로 조롱당한 실제 수업을 확장하는 것은 실용적인 이유가 없다. – estus