【发布时间】:2016-10-02 06:44:21
【问题描述】:
我整天都在苦苦寻找如何测试 $http.GET 请求的结果,该请求从 .json 文件返回数据。我希望你们中的任何人都可以在这里提供任何帮助。实用的应用程序运行完美,并返回了我期望的正确 json。
我有一个名为“ProgramController”的控制器和一个服务; '数据服务'。
控制器:
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;
});
}
}
测试用于测试控制器和服务响应;
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”属性在控制器中定义为“{}”。规范甚至没有达到这一点。它在 httpBackend 的 .flush() 上失败了。
浏览器中的结果显示如下错误;
错误:意外请求:GET js/app/program/program.template.html
预计没有更多请求
其中引用了属于 $stateProvider 定义中定义的 ProgramController 的模板。
你们中有人知道我在这里做错了什么吗?我真的一点头绪都没有。我已经用 $q.defer 做了一些事情并承诺在测试中解决,但我真的无法理解这个......
【问题讨论】:
标签: angularjs unit-testing testing jasmine httpbackend