简体   繁体   English

如何在AngularJS中使用Jasmine测试$ http

[英]How to test $http with Jasmine in AngularJS

I'm trying to test the data received from an $http request in my controller. 我正在尝试在控制器中测试从$ http请求收到的数据。

I don't have too much experience testing with Angular so I'm struggling to under stand how to do it. 我没有太多使用Angular进行测试的经验,因此我很难理解如何做。

$scope. $ scope。 always comes back undefined and when I've tried fetching the data from the test, that seems to fail also. 总是返回未定义状态,当我尝试从测试中获取数据时,这似乎也失败了。 What am I missing? 我想念什么?

Controller: 控制器:

'use strict';

var myApp = angular.module('myApp.view1', ['ngRoute']);

myApp.config(['$routeProvider', function($routeProvider) {
  $routeProvider.when('/view1', {
    templateUrl: 'view1/view1.html',
    controller: 'View1Ctrl'
  });
}]);


myApp.controller('View1Ctrl', [

  '$scope',
  '$http',

  function($scope, $http) {
    $http.get('view1/data.json')
    .then(function(res){
      $scope.data = res.data.data
    });
}]);

Test: 测试:

'use strict';

describe('myApp.view1 module', function() {

  beforeEach(module('myApp.view1'));


  describe('view1 controller', function(){

    var scope, testCont;

      beforeEach(inject(function($rootScope, $controller) {
          scope = $rootScope.$new();
          testCont = $controller('View1Ctrl', {$scope: scope});
      }));

    it('should....', function(){
      expect($scope.data).toBeDefined();
    });

  });
});

The HTTP requests will not fire unless you call $httpBackend.flush() . 除非您调用$httpBackend.flush()否则不会触发HTTP请求。

More information can be found here: http://docs.angularjs.org/api/ngMock .$httpBackend 更多信息可以在这里找到: http ://docs.angularjs.org/api/ngMock。$ httpBackend

Test: 测试:

'use strict';

describe('myApp.view1 module', function() {
var $httpBackend, $rootScope, createController, jsonHandler;
beforeEach(module('myApp.view1'));


describe('view1 controller', function(){

var scope, testCont;

  beforeEach(inject(function($rootScope, $controller, $injector) {
   // Set up the mock http service responses
   $httpBackend = $injector.get('$httpBackend');
   // backend definition common for all tests
   jsonHandler= $httpBackend.when('GET', '/view1/data.json')
                            .respond({data: '[XXX,XXX,XXX]'});
    // Get hold of a scope (i.e. the root scope)
    $rootScope = $injector.get('$rootScope');
    // The $controller service is used to create instances of controllers
    var $controller = $injector.get('$controller');

    createController = function() {
        return $controller('View1Ctrl', {'$scope' : $rootScope });
    };

  }));

it('should....', function(){

   $httpBackend.expectGET('/view1/data.json');
   var controller = createController();
    $httpBackend.flush();
});

});
});

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM