【问题标题】:angular 2 rc7 - testing service - Error: No provider for Stringangular 2 rc7 - 测试服务 - 错误:没有字符串提供者
【发布时间】:2017-01-22 21:41:48
【问题描述】:

我在使用 webpack 快速入门项目进行 angular 2 测试时遇到错误。

错误:没有字符串的提供者!在 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)。

【问题讨论】:

    标签: unit-testing angular dependency-injection angular2-services


    【解决方案1】:

    您需要通过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

    【讨论】:

    • 感谢您的回答!这次我会更彻底地阅读 DI :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-02-21
    • 2015-07-26
    • 2017-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多