2016-06-09 12 views
1

Ich entdecke Karma große Welt und ich wollte Ihnen eine einfache Frage über einen Controller stellen, den ich testen möchte. Hier ist sie:Wie kann ich diesen Winkelregler testen?

angular.module('app', ['ngSanitize']) 
.controller('MyController', ['$scope', '$http', function ($scope, $http) { 
    $scope.myCtrlData = ''; 

    $http.get('../../data/file.json').then(function (res) { 
    $scope.myCtrlData = res.data.ctrlData; 
    }); 
}]); 

Es ist einfach $scope.myCtrlData füttern mit einem lokalen json Dateiinhalt.

Ich fing an, einen schnellen Test zu schreiben, aber ich stecke fest, wenn ich es ausführe.

describe('Test : MyController', function() { 
    var scope, httpBackend, make; 

    beforeEach(module('ngSanitize')); 
    beforeEach(module('app')); 
    beforeEach(inject(function($rootScope, $controller, $httpBackend){ 
    httpBackend = $httpBackend; 
    scope = $rootScope.$new(); 

    httpBackend.whenGET('../../data/file.json') 
    .respond(200, { 
     'data': { 'ctrlData': 'Yeah' } 
    }); 

    make = $controller('MyController', { '$scope': scope }); 

    })); 

    it('should get the data', function() { 
    httpBackend.flush(); 
    expect(scope.myCtrlData).toBeDefined(); 
    expect(scope.myCtrlData).toEqual('Yeah'); 
    }); 
}); 

Als Folge ich mit diesem Protokoll nicht erhalten:

PhantomJS 2.1.1 (Mac OS X 0.0.0) BioController should get the data FAILED 
    Expected undefined to equal 'Yeah'. 
/Users/toto/Projects/awesomeproject/tests/views/yeah/test.js:32:30 
PhantomJS 2.1.1 (Mac OS X 0.0.0): Executed 1 of 1 (1 FAILED) (0 secs/0.01 secsPhantomJS 2.1.1 (Mac OS X 0.0.0): Executed 1 of 1 (1 FAILED) ERROR (0.002 secs/0.01 secs) 

Könnten Sie mir bitte helfen, falsch ich tun, um herauszufinden, was haben?

Vielen Dank für Ihre wertvolle Hilfe :-)

+0

Haben Sie den Wert $ scope.myCtrlData in Dein Controller? Was gibt es? – M3ghana

+0

Hallo! Ich habe den Wert direkt nach der Deklaration $ $ scope.myCtrlData im Controller protokolliert. Es zeigt ein leeres Objekt an. Ich habe auch den Wert direkt nach dem Zuweisen der Antwortdaten protokolliert und den guten Wert protokolliert. Ich frage mich, ob es etwas mit $ http asynchrones Verhalten zu tun hat ... –

Antwort

0

Sie müssen den Controller instanziiert.

make = $controller('MyController', { '$scope': scope }); 

mit

$controller('MyController', { '$scope': scope }); 

Auch

können Sie Ihren Code

it('should get the data', function() { 
    httpBackend.whenGET('../../data/file.json') 
    .respond(200, { 
     'data': { 'ctrlData': 'Yeah' } 
    }); 
    expect(scope.myCtrlData).toBeDefined(); 
    expect(scope.myCtrlData).toEqual('Yeah'); 
    httpBackend.flush(); 
    }); 

Entfernen Sie die httpBackend vom before ändern und überprüft

+0

Ok, aber es funktioniert immer noch nicht, da es 'scope.bio' als eine leere Zeichenfolge betrachtet. Der Aufruf von $ http scheint nicht ausgeführt worden zu sein. –

Verwandte Themen