2

我在使用webpack quickstart项目的角度2测试中遇到错误。angular 2 rc7 - 测试服务 - 错误:没有字符串供应商

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

我从来没有见过这个错误,其中缺少String的提供者。我想出了它与服务构造函数中的private url:string相关的内容,但我该如何解决它?

这里是我的testfile的

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() 

    })) 
}) 

和这里的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,我不确定,但我认为一旦你解决了这个问题,你也可能会遇到错误。我不确定你希望从那里得到什么。

我强烈建议您从Angular文档中看看dependency injection chapter,如果您是DI用Angular的新手。

+0

感谢您的回答!这次我会更彻底地阅读DI –

相关问题