AngularJS - 单元测试HTTP GET以JSON文件 [英] AngularJS - Unit test for http get to JSON file

查看:237
本文介绍了AngularJS - 单元测试HTTP GET以JSON文件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想写一个单元测试来测试一个简单的工厂一个执行 http.get 检索一个JSON文件。

工厂被称为我的控制器内。

下面是呈现出plunker我http.get: http://plnkr.co/编辑/ xg9T5H1Kreo4lwxzRQem?p = preVIEW

Ctrl键:

  app.controller('MainCtrl',函数($范围,$ HTTP,factoryGetJSONFile){  factoryGetJSONFile.getMyData(功能(数据){
    $ scope.Addresses = data.Addresses.AddressList;
    $ scope.People = data.Names.People;
  });});

厂址:

  app.factory('factoryGetJSONFile',函数($ HTTP){
  返回{
    getMyData:功能(完成){
      $ http.get('data.json')
      .success(功能(数据){
        DONE(数据);
      })
      .error(功能(错误){
        警报(发生错误,而试图检索数据');
      });
    }
  }
});

测试:

  // --- SPECS -------------------------描述(与httpBackend',函数(){
    VAR应用;
    beforeEach(函数(){
        应用= angular.mock.module('plunker')
    });    描述(MyCtrl',函数(){
        VAR范围,CTRL theService,httpMock;        beforeEach(注(函数($控制器,$ rootScope,factoryGetJSONFile,$ httpBackend){
            范围= $ rootScope。$新的()
            CTRL = $控制器('MyCtrl',{
                $适用范围:适用范围,
                factoryGetJSONFile:theService,
                $ httpBackend:httpMock
            });
        }));        它(应该做一个GET调用data.json功能(){
                的console.log(********** SERVICE ***********);
                  。httpMock.expectGET(data.json),响应(回应找到了!);
                //expect(factoryGetJSONFile.getMyData())toBeDefined();
                httpMock.flush();
            });    })
});

错误:

 类型错误:未定义是不是(评估'httpMock.expectGET')一个对象


解决方案

您应该指定 $ httpBackend httpMock beforeEach 是这样的:

  beforeEach(注(函数($控制器,$ rootScope,factoryGetJSONFile,$ httpBackend){
        httpMock = $ httpBackend;
        范围= $ rootScope $新的()。
        CTRL = $控制器('MyCtrl',{
            $适用范围:适用范围,
            factoryGetJSONFile:factoryGetJSONFile,
            $ httpBackend:httpMock
        });
    }));

I am trying to write a unit test to test a simple factory that performs a http.get to retrieve a JSON file.

The factory is called within my controller.

Here's a plunker showing my http.get: http://plnkr.co/edit/xg9T5H1Kreo4lwxzRQem?p=preview

Ctrl:

app.controller('MainCtrl', function($scope, $http, factoryGetJSONFile) { 

  factoryGetJSONFile.getMyData(function(data) {
    $scope.Addresses = data.Addresses.AddressList;
    $scope.People = data.Names.People;
  });

});

Factory:

app.factory('factoryGetJSONFile', function($http) {
  return {
    getMyData: function(done) {
      $http.get('data.json')
      .success(function(data) {
        done(data);
      })
      .error(function(error) {
        alert('An error occured whilst trying to retrieve your data');
      });
    }
  }
});

Test:

// ---SPECS-------------------------

describe('with httpBackend', function () {
    var app;
    beforeEach(function () {
        app = angular.mock.module('plunker')
    });

    describe('MyCtrl', function () {
        var scope, ctrl, theService, httpMock;

        beforeEach(inject(function ($controller, $rootScope, factoryGetJSONFile, $httpBackend) {
            scope = $rootScope.$new(),
            ctrl = $controller('MyCtrl', {
                $scope: scope,
                factoryGetJSONFile: theService,
                $httpBackend: httpMock
            });
        }));

        it("should make a GET call to data.json", function () {
                console.log("********** SERVICE ***********");
                  httpMock.expectGET("data.json").respond("Response found!");
                //expect(factoryGetJSONFile.getMyData()).toBeDefined();
                httpMock.flush();
            });

    })
});

Error:

TypeError: 'undefined' is not an object (evaluating 'httpMock.expectGET')

解决方案

You should assign $httpBackend to httpMock in beforeEach like this:

   beforeEach(inject(function ($controller, $rootScope, factoryGetJSONFile, $httpBackend) {
        httpMock = $httpBackend;
        scope = $rootScope.$new();
        ctrl = $controller('MyCtrl', {
            $scope: scope,
            factoryGetJSONFile: factoryGetJSONFile,
            $httpBackend: httpMock
        });
    }));

这篇关于AngularJS - 单元测试HTTP GET以JSON文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆