2016-12-23 5 views
3

У меня есть парусов, узел-JS приложения в угловой JS и я решил сделать некоторые тесты для него, especifycally в серверной части , для которых я использую инструменты, потому что я хочу протестировать их с некоторыми реальными данными на стороне сервера.AngularJS модуль PASSTHROUGH NgMockE2E в() метод не работает

Вот часть кода я хочу, чтобы тест:

app.controller('IdentificationCtrl', function($scope, $rootScope, ... , ajax) { 

    _initController = function() { 
     $scope.loginData = {}; 
    }; 

    $scope.doLogin = function(form) { 
     if (form.$valid) { 
      ajax.sendApiRequest($scope.loginData, "POST", "session/login").then(
       function(response) { 
        //$state.go('app.dashboard'); 
        window.localStorage.setItem("sesion", JSON.stringify(response.data)); 
        $rootScope.userTest = response.data; 
       }, 
       (function(error) { 
        console.log("error") 
       }) 
      ); 
     } 
    }; 

    _initController(); 

}); 

Вот мой service.js файл, в котором я предоставить услуги АЯКС:

angular.module('common.services', []) 
.service('ajax', function($http, $rootScope) { 

    if (window.location.hostname == "localhost") { 
     var URL = "http://localhost:1349/"; 
    } else { 
     var URL = "http://TheRealURL/"; 
    } 

    this.sendApiRequest = function(data, type, method) { 
     $rootScope.$broadcast('loading:show') 
     if (method == "session/login" || method == "session/signup") { 
      var authorization = ""; 
     } else { 
      var authorization = JSON.parse(window.localStorage["sesion"]).id; 
     } 

     data_ajax = { 
      url: URL + method, 
      method: type, 
      headers: { 
       'Content-Type': 'text/plain', 
       'authorization': authorization 
      } 
     } 

     if (type === "GET" || type != "delete") { 
      data_ajax.params = data; 
     } else { 
      data_ajax.data = data; 
     } 

     if (window.localStorage['admin-language']) { 
      data_ajax.headers['accept-language'] = window.localStorage['admin-language']; 
     } else { 
      data_ajax.headers['accept-language'] = window.navigator.language.toUpperCase(); 
     } 

     //The test arrives here perfectly 
     return $http(data_ajax).success(function(data, status, headers, config) { 
      //But does not enter here 
      return data; 
      $rootScope.$broadcast('loading:hide') 
     }).error(function(data, status, headers, config) { 
      //Nor here 
      return data; 
      $rootScope.$broadcast('loading:hide') 
     }); 
     //And finally achieves this point, but without making the http call 
    } 
}) 

Вот html, где я загружаю Jasmine, ngMocks и файл испытания:

... 
<!-- Testing files --> 
<link rel="stylesheet" type="text/css" href="lib/jasmine-core/jasmine.css"> 
<link rel="stylesheet" type="text/css" href="https://cdnjs.cloudflare.com/ajax/libs/jasmine/2.3.3/jasmine.min.css"> 
<script src="https://cdnjs.cloudflare.com/ajax/libs/jasmine/2.3.3/jasmine.min.js"></script> 
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/jasmine/2.3.3/jasmine-html.min.js"></script> 
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/jasmine/2.3.3/boot.min.js"></script> 
<script type="text/javascript" src="lib/angular-mocks/angular-mocks.js"></script> 
<script src="js/TestBackend.js"></script> 
... 

И здесь выше ссылка testBackend.js файла, в котором я намереваюсь сделать тесты:

describe('FirstCycleController', function() { 

beforeEach(module('myApp')); 
beforeEach(module('ngMockE2E')); 

var $controller; 
var $rootScope; 
var $httpBackend; 

beforeEach(inject(function(_$controller_, _$rootScope_, _$httpBackend_) { 

    $controller = _$controller_; 
    $rootScope = _$rootScope_; 
    $httpBackend = _$httpBackend_; 
})); 
    describe('User login', function() { 
     it('verifys that a user is correctly logged.', inject(function() { 
      var $identificationScope = {}; 
      var identificationController = $controller('IdentificationCtrl', { $scope: $identificationScope }); 

      var form = { 
       $valid: true 
      } 

      $identificationScope.loginData = { 
       email: '[email protected]', 
       password: 'usertest' 
      }; 

      $rootScope.userTest = null; 

      //pass through everything 
      $httpBackend.whenGET(/^\w+.*/).passThrough(); 
      $httpBackend.whenPOST(/^\w+.*/).passThrough(); 

      //call the login function simulating a login 
      $identificationScope.doLogin({ $valid: true }); 

      setTimeout(function() { 

       expect($rootScope.userTest).not.toBe(null); 

      }, 150); 
     })); 
    }); 
}); 

Проблема заключается в том, что при работе с testBackend.js тестового файла, его не сделать любой http call. Кажется, что функция passThrough() не выполняет свою работу правильно.

я сталкивался и исправить проблему, не определив Passthrough() функции, которая была, потому что не сработал ngMockE2E модуль (вместо ngMock) в . Но на этот раз Жасмин работает нормально и ошибка просто, что спецификация является ложным:

Error: Expected null not to be null. 

Извиняюсь, если этот вопрос уже решен, я не мог найти решение в любом месте.

ответ

 Смежные вопросы

  • Нет связанных вопросов^_^