gpt4 book ai didi

javascript - 如何在模拟 Angular 服务中从 JSON fixture 中提取数据

转载 作者:行者123 更新时间:2023-11-30 12:20:16 32 4
gpt4 key购买 nike

我创建了以下模拟 Angular 服务来测试 Controller 。当我运行测试时,出现错误:Unexpected request: GET ./fixtures/stats.json

模拟.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;
}]);

我需要在我的 Controller 规范中做些什么来告诉我的测试期待这个 GET 请求,和/或我是否需要在中声明 fixtures 路径我的 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 fixture 中。

最佳答案

根据您的方法,最简单的方法是让 karma 为您的夹具文件提供服务。在您的 karma.conf 文件节中,您可以添加如下内容:

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

我认为 karma 从名为 base 的根目录提供文件,您可能需要使用您提供给 $http 的 url。

我不太明白您为什么要为实际的 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);

关于javascript - 如何在模拟 Angular 服务中从 JSON fixture 中提取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31343393/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com