1

次のテストコードがあります。

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" フック: "should exist" の workFn FAILED TypeError: 'undefined' is not an object ('$q.resolve' を評価中) at..src/js /controllers/imageCtrl-test.js:18;

このエラーは、行 this.loadPics = sinon.stub().returns($q.resolve({.....})); を参照しています。

4

1 に答える 1