用未知的json数据模拟控制器初始化的$ httpBackend

时间:2016-08-30 22:02:49

标签: angularjs jasmine httpbackend

使用$ httpBackend进行模拟时,如果我不确切知道返回的数据类型,如何创建模拟。我希望http调用在控制器初始化。需要注意的是,它将是一个返回的json对象。

 (function () {
    'use strict';

    angular
        .module('app')
        .service('dataService', dataService);


    function dataService($http) {
        this.getMovies = getMovies;

        ////////////////

        function getMovies() {
            return $http.get('./src/app/movies/data.json')
                .then(function (response) {
                    return response.data
                })
        }
    };
})();

(function () {
    'use strict';

    angular.module('app')
        .controller('moviesController', moviesController);

    moviesController.$inject = ['dataService'];

function moviesController(dataService) {
    var vm = this

    vm.movies;

    vm.getMovies = getMovies;
    getMovies();

    function getMovies() { 
        return dataService.getMovies()
            .then(function (data) {
                return vm.movies = data.movies;
            });
    }
};
}());

describe('moviesController', function () {

    var $controller,
        moviesController,
        dataService,
        $httpBackend;

    beforeEach(angular.mock.module('app'));
    beforeEach(angular.mock.module('ui.router'));

    beforeEach(inject(function (_$controller_, _dataService_, _$httpBackend_) {
        $controller = _$controller_;
        dataService = _dataService_;
        $httpBackend = _$httpBackend_;

        moviesController = $controller('moviesController', { dataService: dataService });
    }))

    it('should be defined', function () {
        expect(moviesController).toBeDefined();
    });

it('should initialise with a call to dataService.getMovies()', function () {
    var url = "./src/app/movies/data.json";
    var movies = {};
    $httpBackend.expectGET(url).respond(200, movies);
    moviesController.getMovies();
    expect(moviesController.movies).toEqual(movies);
    $httpBackend.flush(); 

});

});

Expected undefined to equal Object({  }).

1 个答案:

答案 0 :(得分:0)

您可以将返回设置为您在规范中定义的对象。

var response = {};
it('should initialise with a call to dataService.getMovies()', function () {
    $httpBackend.expectGET("./src/app/movies/data.json").respond(response);
    $httpBackend.flush();
});