angular 2 rc7 - testing service - Error: No provider for String
angular 2 rc7 - testing service - Error: No provider for String
我在 angular 2 使用 webpack quickstart 项目进行测试时遇到错误。
Error: No provider for String! in config/karma-test-shim.js
我从未见过缺少字符串提供程序的错误。我发现它与服务构造函数中的私有 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)
}
}
如果我更改为私有 url:any 我会收到此错误
Can't resolve all parameters for SbHttp: (?, Headers, Http).
您需要通过 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.
的 DI 新手,我强烈建议您查看 Angular 文档中的 dependency injection chapter
我在 angular 2 使用 webpack quickstart 项目进行测试时遇到错误。
Error: No provider for String! in config/karma-test-shim.js
我从未见过缺少字符串提供程序的错误。我发现它与服务构造函数中的私有 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)
}
}
如果我更改为私有 url:any 我会收到此错误
Can't resolve all parameters for SbHttp: (?, Headers, Http).
您需要通过 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.
的 DI 新手,我强烈建议您查看 Angular 文档中的 dependency injection chapter