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参照)?しかしここで私はエラーを受け取ります:

Can't resolve all parameters for UserService: (?, ?). 

しかし、UserServiceはまったくインスタンス化されていないはずです。私は間違って何をしていますか? ありがとうコミュニティ!

答えて

0

スタブサービスのコンストラクタprivate http: Http, private authHttp: AuthHttpまたはその一部の模擬サービスで提供する必要があります。

+0

実際に角度のテストシステムについて質問します。 - スタブサービスがスタブサービスに置き換えられた場合、角がスタブサービスをインスタンス化しようとするのはなぜですか? - 私のスタブサービスは、スタブされたものと同じコンストラクタシグネチャを持つべきですか? - httpとauthHttpをプロダクションのように@Injectable()で独自に検索すると思われる角度はありませんか?- コンストラクタに値nullをパイプで渡すにはどうすればいいですか? ありがとうございました! – Bill

+0

うん、あなたは同じコンストラクタを取得する必要があります。だからこそ、そのような痛みを伴うサービスをスタブに掛けたら、スタブするのではなく、スパイするように勧めることができます。あなたの問題を解決するためにそれを見るかもしれません – Flow

関連する問題