2017-01-02 8 views
0

ng testコマンドを実行したときの以下のエラーが表示されます。ここで`ng test`はエラーを示します:バックエンドサービスのすべてのパラメータを解決できません

は私のサービスの仕様、

describe('BackendService',() => { 
    beforeEach(() => { 
    TestBed.configureTestingModule({ 
     providers: [ 
     { 
      provide: Http, useFactory: (backend, options) => { 
      return new Http(backend, options); 
      }, 
      deps: [MockBackend, BaseRequestOptions] 
     }, 
     MockBackend, 
     BaseRequestOptions, 
     BackendService 
     ] 
    }); 
    }); 

    it('should ...', inject([BackendService, MockBackend], (service: BackendService) => { 
    expect(service).toBeTruthy(); 
    }) 

)です。 });

BackendService.ts

export class BackendService { 
    private baseUrl: string = 'https://foo-backend.appspot.com/_ah/api/default/v1'; 

    constructor(private http: Http, baseName: string) { 
    this.baseUrl = this.baseUrl + baseName; 
    } 
    ..... 
} 

、のように見えるBackendServiceクラスのコンストラクタ内の余分なパラメータは、この問題が発生するようにあなたがすることになっているものbaseName知って角度を期待するにはどうすればよい

答えて

1

...らしいですか?すべてのコンストラクタパラメータはインジェクタから取得する必要があります。また、パラメータに対応するトークンがない場合は、ルックアップできません。

あなたは

// somewhere in some file 
import { OpaqueToken } from '@angular/core'; 

export const BASE_NAME_TOKEN = new OpaqueToken("app.base_name"); 

// in test class 
import { BASE_NAME_TOKEN } from 'where-ever' 

TestBed.configureTestingModule({ 
    providers: [ 
    BackendService, 
    { provide: BASE_NAME_TOKEN, useValue: 'whatever-the-base-is' } 
    ] 
}); 

// in service constructor 
import { Inject } from '@angular/core' 
import { BASE_NAME_TOKEN } from 'where-ever' 

constructor(http: Http, @Inject(BASE_NAME_TOKEN) baseName: string) {} 

関連項目実行してトークンを追加することができます。

+0

私は私のコンストラクタで何も変更する必要はありませんがコード。今のところ、それはまあまあです..しかし、私はテストケースを書く方法はわかりません。私はあなたのようにテストベッドを設定しました.. –

+0

Angularは 'baseName'をどこから得るのかを知りたいと思いますか?起こる魔法はありません。 Injectorを入手する方法を知るには、Injectorを設定する必要があります。それ以外の場合は、パラメータとして追加しないでください。 –

+0

_ "テストケースを書く方法がわかりません" _テストケースのどの部分を書き方がわからないのですか? –

関連する問題