gpt4 book ai didi

angularjs - 使用 Jasmine 和 AngularJs 返回 json 数据时测试 $http.get 的问题

转载 作者:行者123 更新时间:2023-11-28 20:22:42 24 4
gpt4 key购买 nike

我已经苦苦挣扎了一整天,已经弄清楚如何测试从 .json 文件返回数据的 $http.GET 请求的结果。我希望你们中的任何人都能在这里提供任何帮助。实际应用程序运行完美,并返回我预期的正确 json。

我有一个名为“ProgramController”的 Controller 和一个服务; '数据服务'。

Controller :

function ProgramController(DataService) {
var vm = this;
vm.timeline = {};

activate();

////////////////
function activate() {
DataService.getTimelineData().then(function (data) {
console.log(data);
});
}
}

服务:

function DataService($http) {
var service = {
getTimelineData: getTimelineData
};

return service;

///////////////
function getTimelineData() {
return $http.get('data/program.json').then(function (httpResult) {
return httpResult.data;
});
}
}

测试,用于测试 Controller 和服务响应;

describe('Program', function () {

var controller, scope, dataserviceMock, httpBackend;

beforeEach(module('mymodule'));

beforeEach(inject(function ($rootScope, $controller, $injector, $q, $httpBackend, $http) {
scope = $rootScope.$new();
httpBackend = $httpBackend;

dataserviceMock = {
getTimelineData: function () {
return $http.get('data/program.json').then(function (httpResult) {
return httpResult.data;
});
}
};

controller = $controller('ProgramController', { 'DataService': dataserviceMock });
}));

describe('when initializing the controller', function () {
it('object timeline should be something', function () {
httpBackend.whenGET('data/program.json').respond(mockedTimelineData);
httpBackend.flush();
expect(controller.timeline).toEqual(mockedTimelineData);
});
});

});

当我尝试这个时,测试失败了。虽然 'controller.timeline' 属性在 Controller 中被定义为 '{}'。该规范甚至没有达到这一点。它在 httpBackend 的 .flush() 上失败。

浏览器中的结果显示如下错误;

Error: Unexpected request: GET js/app/program/program.template.html

No more request expected

它引用属于 $stateProvider 定义中定义的 ProgramController 的模板。

你们中有人知道我做错了什么吗?我真的不知道。我已经在测试中用 $q.defer 和 promise resolving 做了一些事情,但我真的无法理解这个……

最佳答案

@myself..和@Xnake

最终设法修复它!最后!我偶然发现了这篇文章; http://gonehybrid.com/how-to-write-automated-tests-for-your-ionic-app-part-2/在底部,作者也遇到了我收到的同样的问题……禁用模板缓存是我的工作解决方案!

// disable template caching
beforeEach(module(function($provide, $urlRouterProvider) {
$provide.value('$ionicTemplateCache', function(){} );
$urlRouterProvider.deferIntercept();
}));

其他解决方案也写在这里; https://github.com/angular-ui/ui-router/issues/212#issuecomment-69974072

关于angularjs - 使用 Jasmine 和 AngularJs 返回 json 数据时测试 $http.get 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37593383/

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