2017-04-26 132 views
0

[角版本:2.4.5]角茉莉花集成測試與服務使用真實HTTP

我試圖編寫包含利用服務的角度集成組件單元測試內置的HTTP角庫。雖然我無法讓我的服務類實例化:服務未定義或者我得到「錯誤:無法解析'RequestOptions'(?)」的所有參數。

我明白,通常你會嘲笑後端(在其他單元測試中已經成功完成)或使用量角器。其他SO問題參考Angular 1或有似乎不起作用的答案。起始碼:

@Injectable() 
    export class ProjectService { 
     projectFeature: IProjectFeature; 

     constructor(private http: Http) { } 

     getProjects(): Observable<IProjects> { 
     return this.http.get("/api/Projects") 
      .map((response: Response) => response.json() || {}) 
      .catch(this.handleError); 
     } 
    } 

    // Jasmine spec file: 
     beforeEach(async(() => { 
     TestBed.configureTestingModule({ 
      providers: [ 
       Http, 
       ProjectService, // service that leverages HTTP 
       ConnectionBackend 
       //RequestOptions // removed b/c otherwise can't find parameters error happens 
      ], 
      imports: [ 
       HttpModule 
      ] 
     }); 
    })); 

    it('sample test', async(() => { 
     var projectService = TestBed.get(ProjectService); 
     var comp = new ProjectComponent(projectService); 
     comp.ngOnInit(); // internally, calls projectService.getProjects() 
     expect(comp.projects[0].name).toEqual("Sample Project Name"); 
    })); 
+0

你沒有提供的HttpModule來測試牀,是嗎? – estus

+0

@estus目前不是。我已經添加了它,並更新了上面的代碼。現在它失敗了,說「不能讀取屬性響應的未定義」 – dotNetkow

+0

這是不可能說出你的情況有什麼問題。考慮到這是集成測試,可能會有比您發佈的代碼多得多的代碼。無論如何,它就這麼簡單(比[它在A1](http://stackoverflow.com/a/42331623/3731501))簡單得多。我已經添加了解釋如何完成的答案。 – estus

回答

2

HttpModule模塊應該在TestBed模塊配置來提供。在此之後,Http進行真正的XHR請求,不需要額外的動作,一個demo

beforeEach(() => { 
    TestBed.resetTestEnvironment(); 

    TestBed.initTestEnvironment(
     BrowserDynamicTestingModule, 
     platformBrowserDynamicTesting() 
    ); 

    TestBed.configureTestingModule({ 
     imports: [ 
     HttpModule 
     ] 
    }); 

    }); 

    it('should do XHR', async(inject([Http], (http) => { 
    http.get('test.json').subscribe(res => { 
     expect(res.json()).toBe(1); 
    }); 
    })));