我正在嘗試編寫一個單元測試,以確定在返回承諾的服務調用後,我的角度2組件上的屬性被填充。模擬服務調用本地json-server而不是遠程端點 - 測試語法? (Angular 2)
我的組件包含一個方法:
getListItems() {
this.employeeService.loadEmployees().then(res => {
this._employees = res['Employees'];
this.ref.markForCheck();
});
};
這就要求對服務的方法:
@Injectable()
export class EmployeeService {
constructor(
public http: Http
) { }
\t \t
public loadEmployees(): Promise<any> {
return this.http.get('employees.json')
.map((res: Response) => res.json())
.toPromise();
}
}
抓住哪些來自本地json文件的內容(代替創建遠程端點)。這工作得不錯,但我想用一個調用本地json-server的測試替換服務方法。
據我所知,在Karma測試運行時,我已經正確地啓動了JSON服務器的上下旋轉 - 我可以使用Postman在測試運行時成功執行GET請求。
因此我想用模擬來取代我的服務:
class MockEmployeeService {
headers: Headers;
constructor(private http: Http) {
this.headers = new Headers({ 'Content-Type': 'application/json' });
}
public loadEmployees() {
return this.http.get('http://localhost:3004/getEmployees',
{headers: this.headers, body: '' })
\t .map((res: Response) => res.json());
\t }
}
,我已經設置了單元測試如下:
describe('ListComponent',() => {
let fixture;
let component;
let employeeService;
beforeEach(async(() => {
\t TestBed.configureTestingModule({
\t imports: [
\t \t HttpModule
\t ],
\t declarations: [
\t \t ListComponent
\t ],
\t providers: [
\t {provide: EmployeeService, useClass: MockEmployeeService}
\t ]
})
.compileComponents();
}));
beforeEach(() => {
\t fixture = TestBed.createComponent(ListComponent);
\t component = fixture.componentInstance;
\t employeeService = fixture.debugElement.injector
.get(EmployeeService);
\t });
it('should retrieve test values from json-server (async)',
async(() => {
\t fixture.detectChanges();
\t component.getListItems();
\t fixture.whenStable.then(() => {
\t \t expect(component._employees).toBeDefined();
\t });
}));
})
所以(我認爲)我打電話給應該調用該服務的組件上的方法,應該由MockEmployeeService
替換。我收到以下錯誤噶:
× should retrieve test values from json-server (async)
PhantomJS 2.1.1 (Windows 7 0.0.0)
Failed: Can't resolve all parameters for MockEmployeeService: (?).
我幾乎在我的知識,在這一點上的界限,我無法找到在線資源更新,使用測試牀的測試。有人能夠發現任何在這裏看起來關閉?
謝謝......猜猜我不會走那條路:) – dgkane