Harshit
Harshit

Reputation: 1565

Angular 2 : Can't resolve all the parameters of MockConnection (?) - error occurring even after import of HttpModule

Can anyone help me with this error: Can't resolve all the parameters of MockConnection (?)

I tried to find the solution on StackOverflow. This error is being occurred even after I have imported HttpModule. It would be great anyone can guide where I'm doing mistake -

shared/mock-backend/knowledge.mock.ts

export const MockKnowledgeApi = {
     query: 'Berlin',
     max_hits: 5,
     hosts: ['http://dbpedia.org/resource/Berlin'],
     language: 'en_US',
}

knowledgeapi-service.spec.ts

import { TestBed, inject, async, fakeAsync, tick } from '@angular/core/testing';
import { MockBackend, MockConnection } from '@angular/http/testing';
import { Http, BaseRequestOptions, RequestMethod, Response, ResponseOptions, HttpModule } from '@angular/http';
import { KnowledgeapiService } from './knowledgeapi.service';
import { MockKnowledgeApi } from './shared/mock-backend/knowledge.mock';

const mockHttp_provider = {
   provide: Http,
   deps: [MockBackend, BaseRequestOptions],
   useFactory: (backend: MockBackend, options: BaseRequestOptions) => {
     return new Http(backend, options);
   }
 }

 describe('Service: KnowledgeapiService', () => {
   let service: KnowledgeapiService = null;
   let backend: MockBackend = null;

    beforeEach(() => {
      TestBed.configureTestingModule({
       providers: [
        KnowledgeapiService,
        MockBackend,
        BaseRequestOptions,
        mockHttp_provider,
        MockConnection
       ],
       imports: [
        HttpModule
       ]
     });
   });

beforeEach(inject([KnowledgeapiService, MockBackend], (knowledgeService: KnowledgeapiService, mockBackend: MockBackend) => {
     service = knowledgeService;
     backend = mockBackend;
    }));

const searchquery = 'Berlin';
const _queryResult = MockKnowledgeApi;

   it('should create an instance KnowledgeapiService',
     inject([KnowledgeapiService, MockBackend], () => {
       expect(service).toBeTruthy();
     })
   );

   it('should call knowledge service API and return the result', () => {
     backend.connections.subscribe((connection: MockConnection) => {
       const options = new ResponseOptions({
         body: JSON.stringify(MockKnowledgeApi)
       });

       connection.mockRespond(new Response(options));
       expect(connection.request.method).toEqual(RequestMethod.Get);
       expect(connection.request.url).toEqual(
         `http://lookup.dbpedia.org/api/search/KeywordSearch` +
                     `?QueryString=${searchquery}`
       );
     });

     service.getsearchresults(searchquery).subscribe((res) => {
       expect(res).toEqual(MockKnowledgeApi);
     });

   });

  });

Upvotes: 2

Views: 698

Answers (1)

Fredrik Lundin Grande
Fredrik Lundin Grande

Reputation: 8186

You need to remove the MockConnection from the TestBed.configureTestingModule({providers: array as it takes a Request object in its constructor - and you don't have that type of object provided.

The MockBackend will take care of initializing the MockConnection object for you.

Upvotes: 1

Related Questions