2017-01-25 82 views
3

我需要一種方法來在開發過程中(而不是在測試期間)在Angular 2中模擬我的服務。原因是REST-ful服務器不可靠(在沒有通知的情況下更改API,不穩定,難以擦除和站起來再次)。如果我可以嘲笑我的服務(基本上都是HTTP REST客戶端),那將會很好。如何在Angular 2中爲開發(而不是測試)提供模擬服務?

在Angular 2中創建模擬後端服務的最佳方法是什麼?我在測試方面獲得了很多嘲笑後端服務的互聯網結果,但是這個上下文並不是我的用例(我不是在嘲笑測試,而是爲了開發)。

我已經使用angular cli來創建和支撐我的項目,我不確定該工具是否可以提供幫助。

我正在尋找像Spring這樣的方法,我們可以用「profiles」註釋組件/類,然後方便地指定哪個配置文件處於活動狀態以獲得注入的正確依賴關係。

回答

4

我認爲實現您的目標的最佳方法是使用接口和服務提供者。我希望下面的代碼示例可以爲您指出正確的方向:

數據tables.service-interface.ts

export interface DataTablesServiceInterface { 
    getHeaders(): Promise<any[]>; 
    getData(query?: string, offset?: number, size?: number): Promise<any>; 
} 

數據tables.service-provider.ts

import { Http } from '@angular/http'; 
import { OpaqueToken } from '@angular/core'; 

import { DataTablesServiceInterface } from './data-tables.service-interface'; 
import { DataTablesService } from './data-tables.service'; 
import { DataTablesMockService } from './data-tables.mock-service'; 

import { environment } from '../../../environments/environment'; 

let dataTablesServiceFactory = (http: Http) => { 
    var serviceToReturn: DataTablesServiceInterface; 
    if (environment.production) { 
     serviceToReturn = new DataTablesService(http); 
    } else { 
     serviceToReturn = new DataTablesMockService(); 
    } 
    return serviceToReturn; 
}; 

export let dataTablesToken = new OpaqueToken('DataTablesServiceInterface'); 

export let dataTablesServiceProvider = 
    { 
     provide: dataTablesToken, 
     useFactory: dataTablesServiceFactory, 
     deps: [ 
      Http 
     ] 
    }; 

你只需要實現實際和模擬服務,並且可以根據已經在angular-cli中實現的嵌入配置文件機制使用environment

編輯: 還有一些我忘了提及的信息。在您的責任模塊中,您需要聲明dataTablesServiceProvider作爲提供者。在你想使用服務的組件中,DI的方法與標準方法略有不同。

在組件的構造函數,你寫:

constructor(@Inject(dataTablesToken) private dataTablesService: DataTablesServiceInterface) 

如果你有興趣在不透明的令牌,我建議看看Opaque Token by Angular

相關問題