unit-testing - angular 2 rc7 - 测试服务 - 错误 : No provider for String

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

我在使用 webpack quickstart 项目进行 Angular 2 测试时遇到错误。

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

我从未见过缺少 String 提供程序的错误。我发现它与服务构造函数中的私有(private) 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)
    }
}

如果我更改为私有(private) url:any 我会收到此错误

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

最佳答案

您需要通过 creating a token 使其可注入(inject),使用 @Inject() 注入(inject) token ,然后将其作为提供者添加到 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,我不确定,但我认为一旦你修复了这个问题,你也可能会遇到错误。我不确定您希望从哪里得到它。

我强烈建议您查看 dependency injection chapter如果您是使用 Angular 进行 DI 的新手,请参阅 Angular 文档。

关于unit-testing - angular 2 rc7 - 测试服务 - 错误 : No provider for String,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39501353/

相关文章:

java - 将 Guice 依赖注入(inject)添加到 web.xml 中配置的 Servlet

c# - 使用 Moq 测试对不同类的调用

reactjs - Jest setSystemTime 不适用于全局范围

android - 找不到带有ionic2 cordova的Android构建工具

c# - DependencyResolver.Current.GetService 总是返回 null

java - 为 spring ConfigurationProperties 子类使用构造函数注入(inject)

java - JUnit:如何提供公开我的所有方法以便进行测试

unit-testing - Spring JsonView 的单元测试

Angular 日期管道自定义输出

html - Angular 7+ : ngbDropdown menu collapse instead of popover