2016-12-23 13 views
3

を動作しません。実際のサーバー側のデータでテストしたいので、私はジャスミンngMockE2Eツールを使用しています。ここでAngularJSは、モジュールNgMockE2Eのパススルー()メソッドは、especifycally <strong>バックエンド</strong>部分で、私は<strong>角度-jsから</strong>に<strong>帆</strong>、<strong>ノード-jsから</strong>アプリケーションを持っていると私はそれのためにいくつかのテストをすることに決め

は、私がテストしたいコードの一部です:

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 
    } 
}) 

ここにある:ここで

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(); 

}); 

は、私はAjaxのサービスを提供している私のservice.jsファイルは、あります私がロードするHTML ジャスミン,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:となります。 passThrough()機能が正しく機能していないようです。

私が(代わりにngMockの)ngMockE2Eモジュールをロードしていなかったためでしたパススルー()機能を、定義されたではないという問題に直面して修正。しかし、この時間はジャスミンが正常に動作しているとエラーがスペックが虚偽であることだけである:

Error: Expected null not to be null. 

謝罪この問題はすでに解決された場合、私はどこにでも解決策を見つけることができませんでした。

答えて

関連する問題

 関連する問題