2

webpack quickstartプロジェクトを使用して角度2のテストでエラーが発生しました。角度2 rc7 - テストサービス - エラー:文字列のプロバイダがありません

Error: No provider for String! in config/karma-test-shim.js

Stringのプロバイダがない場合は、このエラーが発生したことはありません。私はその関連する私的なURLを理解しました:サービスコンストラクタの文字列ですが、どのように解決しますか?

は、ここに私のテストファイル

describe('http.ts',()=>{ 
    beforeEach(()=>{ 
     TestBed.configureTestingModule({ 
      providers:[ 
       SbHttp, 
       MockBackend, 
       BaseRequestOptions, 
       { provide: Http, useFactory: (backend: MockBackend, defaultOptions: BaseRequestOptions) => { 
        return new Http(backend, defaultOptions); 
       }, deps: [MockBackend, BaseRequestOptions]} 
      ], 
      imports: [ 
       HttpModule 
      ] 
     }) 
    }); 

    afterEach(()=>{ 
     TestBed.resetTestingModule() 

    }); 

    it('get() should work', inject([SbHttp],(sbHttp:SbHttp)=>{ 
     expect(true).toBeTruthy() 

    })) 
}) 

だとここで私は民間のURLに変更した場合はSbHttpサービス

@Injectable() 
export class SbHttp{ 

    private baseUrl:string; 

    constructor(private url:string, private headers:Headers, private http:Http 
    ){ 
     this.baseUrl = utils.stripTrailingSlash(url) 
    } 
} 

です:任意の私は

Can't resolve all parameters for SbHttp: (?, Headers, Http).

答えて

2

は、あなたがする必要がある。このエラーを取得していますそれをcreating a tokenで注入可能にし、@Inject()を使用してトークンを注入し、 providersリストにプロバイダとして追加します。

import { OpaqueToken, Injct } from '@angular/core'; 

const APP_URL = new OpaqueToken('app.url'); 

class SbHttp { 
    constructor(@Inject(APP_URL) url: string, ...) {} 
} 

TestBed.configureTestingModule({ 
    providers: [ 
    { provide: APP_URL, useValue: 'http://localhost' } 
    ] 
}); 

実際のアプリでもprovidersを設定する必要があります。 Headersについてはわかりませんが、一度修正すればエラーになるかもしれません。私はどこからそれを得ることが期待されているのか分からない。

角度を使用してDIを使い慣れていない場合は、角度文書からdependency injection chapterをご覧ください。

+0

答えに感謝します!私はこの時間をより完全にDIを通して読むでしょう:) –