我在使用webpack快速入门项目进行角度2测试时遇到错误。
错误:没有String的提供者!在config / karma-test-shim.js
中
我从未见过缺少String提供程序的错误。我发现它与服务构造函数中的私有url:string相关,但我该如何解决呢?
这是我的测试文件
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)
}
}
如果我更改为私人网址:任何我收到此错误
无法解析SbHttp的所有参数:(?,Headers,Http)。
答案 0 :(得分: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 with Angular,我强烈建议您查看Angular文档中的dependency injection chapter。