如何从 mock Angular 服务中的 JSON fixture 中提取数据
How to pull data from JSON fixture in mock Angular service
我创建了下面的模拟 Angular 服务来测试控制器。当我 运行 我的测试我得到错误: Unexpected request: GET ./fixtures/stats.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
请求,and/or 我需要在我的 karma.config.js
files
数组?
编辑:显示我当前(工作)设置的更多信息:
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 夹具中。
根据您的方法,最简单的方法是让 karma 为您的夹具文件提供服务。在您的 karma.conf 文件节中,您可以添加如下内容:
{ pattern: './fixtures/*.json',
watched: true,
served: true,
included: false }
我认为 karma 从名为 base 的根目录提供文件,您可能需要使用 url 您给 $http 的文件。
我不太明白你为什么要用一个 MockService 来代替你实际的 MockService。这似乎是一种非常重量级的方法。更常见的做法是使用您的实际服务并模拟后端。在你的测试中是这样的:
before(inject(function( $httpBackend, playersService) {
o = playersService;
back = $httpBackend;
back.whenGET('/therealPath').respond({});
}));
您仍然需要一种方法来加载您的夹具文件,但您可以安装 karma-read-json 然后遵循如下模式:
var valid_respond = readJSON('./fixtures/stats.json');
$httpBackend.whenGET('/therealPath').respond(valid_respond);
我创建了下面的模拟 Angular 服务来测试控制器。当我 运行 我的测试我得到错误: Unexpected request: GET ./fixtures/stats.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
请求,and/or 我需要在我的 karma.config.js
files
数组?
编辑:显示我当前(工作)设置的更多信息:
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 夹具中。
根据您的方法,最简单的方法是让 karma 为您的夹具文件提供服务。在您的 karma.conf 文件节中,您可以添加如下内容:
{ pattern: './fixtures/*.json',
watched: true,
served: true,
included: false }
我认为 karma 从名为 base 的根目录提供文件,您可能需要使用 url 您给 $http 的文件。
我不太明白你为什么要用一个 MockService 来代替你实际的 MockService。这似乎是一种非常重量级的方法。更常见的做法是使用您的实际服务并模拟后端。在你的测试中是这样的:
before(inject(function( $httpBackend, playersService) {
o = playersService;
back = $httpBackend;
back.whenGET('/therealPath').respond({});
}));
您仍然需要一种方法来加载您的夹具文件,但您可以安装 karma-read-json 然后遵循如下模式:
var valid_respond = readJSON('./fixtures/stats.json');
$httpBackend.whenGET('/therealPath').respond(valid_respond);