2017-10-26 8 views
0

(?) :Angular2 Test (재스민) 조롱 서비스. 서비스에 대한 모든 매개 변수를 확인할 수 없습니다 : 내 구성 요소를 테스트하기 위해 다음과 같은 서비스를 조롱하려고

제작 :

@Injectable() 
export class UserService extends DtoService { 
    // some not relevant stuff. 
} 

@Injectable() 
export abstract class DtoService { 
    constructor(private http: Http, private authHttp: AuthHttp) {} 

    get() { 
     return this.http.get(...); 
    } 
} 

@Component({ 
    selector: 'users', 
    templateUrl: 'users.component.html', 
    styleUrls: ['users.scss'], 
    providers: [UserService] 
}) 
export class UsersComponent implements OnInit, OnDestroy { 
    constructor(private userService: UserService) {} 
    // etc 
} 

테스트 :

class MockUserService { 
    public get(): Observable<User> { 
     return Observable.of(new User({id: 1, email: '[email protected]'})); 
    } 
} 

beforeEach(async(() => { 

    TestBed 
     .configureTestingModule({ 
      declarations: [UsersComponent], 
      providers: [{provide: UserService, useClass: MockUserService}] 
     }); 
    this.fixture = TestBed.createComponent(UsersComponent); 

})); 

을 가장 고전적인 유스 케이스인데, 맞습니다 (angular test doc 참조)? 하지만 여기에 오류가 발생합니다 :

하지만 UserService는 전혀 인스턴스화되지 않아야합니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까? 커뮤니티에 감사드립니다.

답변

0

당신은 당신의 stubed 서비스의 생성자 private http: Http, private authHttp: AuthHttp 또는 일부 조롱 서비스에 제공해야합니다. - 그것이 stubing 서비스에 의해 stubed 서비스를 인스턴스화하는 각 시도를 교체 않는 경우에 왜 :

+0

그것은 실제로 각도의 테스트 시스템에 대한 자세한 질문을? - 내 stubing 서비스는 stubed의보다 같은 생성자 서명을해야합니까? 각도는 생산과 같은 @Injectable()와 자체에 의해 HTTP 및 authHttp을 찾을 생각하지 않습니다 - ?- 어떻게 NULL 값을 생성자에 null 파이프 할 수 있습니까? 감사합니다. – Bill

+0

예, 동일한 생성자를 가져와야합니다. 그래서 스텁에 고통스러운 서비스를받을 때 스터브하는 대신에 스파이로 간다고 권유 할 수 있습니다. 각진 문서는 스파이 서비스에 대해 분명히 알고 있으므로 문제를 해결하기 위해 살펴볼 수 있습니다. – Flow