2016-06-13 69 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