2017-11-06 23 views
1

私はが持っているもの:エラー:Httpのプロバイダがありません!コンポーネントのカルマのテスト

@Injectable() 
export class MyService { 
constructor(private http: Http) { 
} 

someFunction() { 
    return this.http.get(URL) 
    .map((res: Response) => { 
    res.json(); 
    }); 
} 
} 

MyComponent.ts:

@Component({ 
    selector: 'app-test', 
    templateUrl: './test.component.html', 
    styleUrls: ['./test.component.scss'] 
}) 

export class MyComponent implements OnInit { 
    constructor(private myService: MyService) {} 
} 
サービスプロバイダは、HTTPに依存し、

MyService.tsをテストする必要があります

ngテストを実行すると、エラー

私は私が試したがある すべてを試してみました何

describe('MyComponent',() => { 
    let component: MyComponent; 
    let fixture: ComponentFixture<MyComponent>; 

    beforeEach(async(() => { 
    TestBed.configureTestingModule({ 
     imports: [ 
     HttpModule 
     ], 
     declarations: [ MyComponent], 
     providers: [ 
     MockBackend, 
     BaseRequestOptions, 
     { 
      provide: HttpClient, 
      useFactory: (backendInstance: MockBackend, defaultOptions:   BaseRequestOptions) => { 
      return new Http(backendInstance, defaultOptions); 
      }, 
      deps: [MockBackend, BaseRequestOptions] 
     }, 
     MyService 
     ] 
    }) 
    .compileComponents(); 

    })); 

    beforeEach(() => { 
    fixture = TestBed.createComponent(MyComponent); 
    component = fixture.componentInstance; 
    // fixture.detectChanges(); 
    }); 

    it('should be created',() => { 
    expect(component).toBeTruthy(); 
    }); 
}); 

myComponentという用ませHTTPプロバイダはMyServiceでは

を作成

MyComponent.spec.tsする必要があり、 表示されません!私はまた、MockBackendについて読んで、this linkが示すようにサービスでそれを作りました!それは私のために働いていない!

助けが必要ですか?

答えて

1

実際に私が輸入HTTPモジュールを欠けていた、だけでなくcomponent.spec.tsファイルで、service.spec.tsファイルでHTTP、ConnectionBackendを提供しています。

+0

+1。ありがとうございました。なぜコンポーネントスペックで言及されていても、サービス仕様にHTTPModuleを含める必要があります。コンポーネントのサービスがコンポーネント仕様でスパイされる場合、なぜサービス仕様で明示的にインポートする必要がありますか? – zulu

関連する問題