2016-06-13 72 views
0

main.ts文件看起來像這樣:Angular 2:錯誤:沒有爲Http提供程序! (帳戶服務 - > HTTP)

import { bootstrap } from '@angular/platform-browser-dynamic'; 
import { enableProdMode } from '@angular/core'; 
import { HTTP_PROVIDERS } from '@angular/http' 
import { ClientDashboardTwoAppComponent, environment } from './app/'; 

if (environment.production) { 
    enableProdMode(); 
} 

bootstrap(ClientDashboardTwoAppComponent, [HTTP_PROVIDERS]); 

我嘗試添加http服務進入我的服務,因爲我只是硬編碼的all()響應現在:

import { Injectable } from '@angular/core'; 
import { Http, Response } from '@angular/http' 

@Injectable() 
export class AccountService { 
    constructor(private http: Http) {} // <------------------ just added and it broke my tests 

    all() { 
    return Promise.resolve([ 
     { name: "Account 1" }, 
     { name: "Account 2" }, 
     { name: "Account 3" }, 
    ]); 
    } 

} 

但是,該行使用此服務中斷了組件測試(這些規範來自角度cli生成器,我所做的只是在beforeEachProviders()中添加了AccountService提供程序):

import { 
    beforeEach, 
    beforeEachProviders, 
    describe, 
    expect, 
    it, 
    inject, 
} from '@angular/core/testing'; 
import { ComponentFixture, TestComponentBuilder } from '@angular/compiler/testing'; 
import { Component } from '@angular/core'; 
import { By } from '@angular/platform-browser'; 
import { EngagementTableComponent } from './engagement-table.component'; 
import { AccountService } from '../account.service'; 

describe('Component: EngagementTable',() => { 
    let builder: TestComponentBuilder; 

    beforeEachProviders(() => [EngagementTableComponent, AccountService]); 
    beforeEach(inject([TestComponentBuilder], function (tcb: TestComponentBuilder) { 
    builder = tcb; 
    })); 

    it('should inject the component', inject([EngagementTableComponent], 
     (component: EngagementTableComponent) => { 
    expect(component).toBeTruthy(); 
    })); 

    it('should create the component', inject([],() => { 
    return builder.createAsync(EngagementTableComponentTestController) 
     .then((fixture: ComponentFixture<any>) => { 
     let query = fixture.debugElement.query(By.directive(EngagementTableComponent)); 
     expect(query).toBeTruthy(); 
     expect(query.componentInstance).toBeTruthy(); 
     }); 
    })); 
}); 

@Component({ 
    selector: 'test', 
    template: ` 
    <engagement-table></engagement-table> 
    `, 
    directives: [EngagementTableComponent] 
}) 
class EngagementTableComponentTestController { 
} 

我是否錯過了一個步驟?我需要在規格中注入什麼?

回答

1

確保package.json已將@angular/http程序包添加到正確加載Http依賴項模塊。

"dependencies": { 
    ...., 
    "@angular/http": "2.0.0-rc.1", //<--add it in package.json 
    ...., 
    .... 
} 
+0

是的,它在那裏。當我刪除'構造函數(私人http:Http){}'它不會中斷 – Edmund

+0

您是否使用打字稿? –

+0

是的,我是。這是否使任何不同 – Edmund