2015-07-10 81 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