我有以下测试代码:
describe('imagesCtrl', function () {
var $rootScope;
var $compile;
var $log;
var $controller;
var imagesCtrl;
var $q;
var images;
var vm;
beforeEach(module('flickrPOC'));
beforeEach(module(function ($provide) {
$provide.service('images', function () {
this.loadPics = sinon.stub().returns($q.resolve({message: 'object data from stub'}));
});
}));
beforeEach(inject(function (_$rootScope_, _$compile_, _$log_, _$controller_, _$q_, _images_) {
$compile = _$compile_;
$rootScope = _$rootScope_;
$log = _$log_;
$controller = _$controller_;
$q = _$q_;
images = _images_;
vm = $controller('imagesCtrl');
}));
describe('imagesCtrl', function () {
beforeEach(function () {
images.loadPics.returns($q.resolve({message: 'd'}));
});
it('should exist', function () {
expect(vm.getImages).to.exist();
}
});
});
我正在注入一个控制器,其设置如下:
(function (angular) {
angular
.module('flickrPOC')
.controller('imagesCtrl', imagesCtrl);
imagesCtrl.$inject = ['images', '$compile', '$http', '$q'];
function imagesCtrl(images, $compile, $http, $q) {
/* jshint validthis: true */
var vm = this;
vm.getImages = function () {
images.loadPics()
.then(function (res) {
console.log(res);
vm.images = res.name;
})
.catch(
function(err){
console.error('Error loading images ', err.status, err.data);
})
.finally(function () {
console.log("finally finished");
});
};
}
})(angular);
运行测试时,我收到以下错误:
PhantomJS 1.9.8 (Mac OS X 0.0.0) imagesCtrl "before each" hook: workFn for "should exist" FAILED TypeError: 'undefined' is not an object (evalating '$q.resolve') at..src/js /controllers/imageCtrl-test.js:18;
这个错误是指 this.loadPics = sinon.stub().returns($q.resolve({.....}));