2015-07-10 30 views
1

我已經創建了下面的模擬Angular服務來測試控制器。當我運行我的測試時,出現錯誤:Unexpected request: GET ./fixtures/stats.json如何從模擬角度服務中的JSON夾具中提取數據

mock.players.service.js:

'use strict'; 

angular.module('mockPlayersService', []) 
    .factory('playersService', ['$http', '$q', 
    function($http, $q) { 
     var playersService = {}; 

     playersService.stats = $http.get('./fixtures/stats.json'); 

     playersService.getStats = function() { 
     var defer = $q.defer(); 
     defer.resolve(this.stats); 
     return angular.extend({$promise: defer.promise}, this.stats); 
     }; 

     return playersService; 
    }]); 

有什麼我需要在我的控制器的規格做告訴我的測試,預計這種GET要求,和/或做我需要聲明fixtures我的karma.config.jsfiles數組中的路徑?

編輯:一些更多的信息,以顯示我的電流(工作)的設置:

playersService.stats = { 
    'firstName': 'John', 
    'middleName': 'James', 
    'lastName': 'Doe', 
    'city': 'Cleveland', 
    'state': 'OH', 
}; 

playersService.getStats = function() { 
    var defer = $q.defer(); 
    defer.resolve(this.stats); 
    return angular.extend({$promise: defer.promise}, this.stats); 
}; 

我只是想移出,目前playersService.stats對象成JSON夾具。

+0

你正在寫一個模擬服務給姐姐你的實際嗎?我想他們大都是一樣的。您應該在我們的控制器中使用$ httpBackend,以及您的實際服務! –

+0

我編寫了模擬服務,以便從JSON夾具中提取模擬數據。我絕對不想使用我的真實服務並拉取真實的數據。 – MattDionis

+0

你正在使用什麼測試跑步者? –

回答

3

根據你的方法,最簡單的事情就是讓業力爲你的夾具文件服務。在您的karma.conf文件節,你可以像這樣添加的東西:

{ pattern: './fixtures/*.json', 
    watched: true, 
    served: true, 
    included: false } 

我覺得因果報應從根稱爲基提供文件服務,您可能需要您給予$ HTTP URL來打。

我不明白爲什麼你打擾一個MockService姊妹你的實際。這似乎是一個非常沉重的方法。更常見的做法是使用您的實際服務並模擬後端。像這樣的事情在你的測試:

before(inject(function($httpBackend, playersService) { 
    o = playersService; 
    back = $httpBackend; 

    back.whenGET('/therealPath').respond({}); 


})); 

你還是會需要一個辦法讓你裝夾具的文件,但你可以安裝果報讀JSON,然後按照這樣的模式:

var valid_respond = readJSON('./fixtures/stats.json'); 
$httpBackend.whenGET('/therealPath').respond(valid_respond); 
+1

你是對的,我越想越多,我越發意識到我太複雜了。 – MattDionis