2013-08-11 19 views
11

http istemcimden bazılarını benim sınamada değil, birim sınamada iletmek istiyorum, ancak passThrough() yöntemini çağırmaya çalıştığımda, eksik bir yöntem hatası atılır:

"TypeError: Object # has no method 'passThrough'".

herkes bunu lütfen düzeltebilirim biliyor mu

?

kodum yok:

'use strict'; 

describe('Controller: MainCtrl', function() { 

    // load the controller's module 
    beforeEach(module('w00App')); 

    var scope, MainCtrl, $httpBackend; 

    // Initialize the controller and a mock scope 
    beforeEach(inject(function(_$httpBackend_, $rootScope, $controller) { 
     $httpBackend = _$httpBackend_; 
     $httpBackend.expectGET('http://api.some.com/testdata.json').passThrough(); 


     scope = $rootScope.$new(); 
     MainCtrl = $controller('MainCtrl', { 
      $scope: scope 
     }); 
    })); 
}); 
+3

gibi [belgelerinde] açıklandığı (http://docs.angularjs.org/api/ngMock.$httpBackend): * Birim Testler sırasında, bizim birim testler hızla çalıştırmak istiyorum ve hiçbir harici bağımlılıkları bu yüzden gerçek bir sunucuya XHR veya JSONP istekleri göndermek istemiyoruz *. Ünite testlerinde kullanılan $ httpBackend servisi, üzerinden geçemez. Ancak uçtan uca test tarafından kullanılan $ httpBackend olabilir. –

+6

Bu, harici şablonlarla test direktiflerini gerekenden daha zor hale getirir, sence de öyle değil mi? – SimplGy

cevap

4

Eğer isteklerini alay o zaman, sadece ana html dosyasında angular-mocks yüklemek, geliştirme sırasında arka uç alay uygulamanızda (angular.module('myApp', ['ngMockE2E'])) bir bağımlılık olarak o kadar ekleyebilir ve isterseniz gerek.

Örneğin;

angular.module('myApp') 
    .controller('MainCtrl', function ($scope, $httpBackend, $http) { 
    $httpBackend.whenGET('test').respond(200, {message: "Hello world"}); 
    $http.get('test').then(function(response){ 
     $scope.message = response.message //Hello world 
    }) 
    }); 

ngMockE2E ekleyerek size angularjs yönlendirme yoluyla bunu ihtimaline karşı yolları kurmak gerektireceğini olsa dikkatli olun.

Örnek;

angular.module('myApp', ['ngMockE2E']) 
    .config(function ($routeProvider) { 
    $routeProvider 
     .when('/', { 
     templateUrl: 'views/main.html', 
     controller: 'MainCtrl' 
     }) 
     .otherwise({ 
     redirectTo: '/' 
     }); 
    }) 
    .run(function($httpBackend){ 
    $httpBackend.whenGET('views/main.html').passThrough(); 
    }) 
+11

Uygulamanıza bağımlı olarak açısal-alay eklememelisiniz, ancak bunu karma.conf sayfanızda kullanmalısınız. Daha sonra beforeEach (modül (...)) 'ngMockE2E' içinde geçer. – gonzofish

+4

+1 gonzofish. Sadece beforeEach (function() {module ('ngMockE2E');}); senin sınavında. Uygulamanızı test materyalleriyle kirletmenize gerek yok. – benek