| 

.NET C# Java Javascript Exception

2
Hallo,

ich hab in einem AngularJS-Controller einen Eventlistener:
$scope.$on('openDialog', function (event, templateUrl) {
var newDialog = {
id: $scope.id++,
templateUrl: templateUrl
};
$scope.dialogs.push(newDialog);
});


Dieser wird normalerweise so aufgerufen:
$rootScope.$broadcast('openDialog', 'test.html');


Aber wie kann ich das jetzt mit Jasmine.js testen?
Ich hab es so probiert, aber das funktioniert nicht:

describe('Test dialog Controller', function () {

var $scope, ctrl, expected;

beforeEach(inject(function ($rootScope) {
$scope = $rootScope.$new();
}));


expected = {
id: 1,
templateUrl: 'test.html'
};

it('should add a new dialog', inject(function ($controller) {
ctrl = $controller('dialogController', {
$scope: $scope
});
$rootScope.$broadcast('openDialog', 'test.hml');

expect($scope.dialogs).toBe(expected);
}));

});


Kann mir jemand helfen?
05.05.2014
Smartin 35 5
Was genau funktioniert nicht? Gibt es eine Fehlermeldung? Wird der Event-Handler nicht aufgerufen? Oder schlägt "nur" die Expectation fehl (z.B. weil der Testscope nicht die ID 0 hat, wie Dein Testfall anscheinend annimmt)?
Matthias Hlawatsch 05.05.2014
Der Event-Handler wird nicht aufgerufen
Smartin 05.05.2014
1 Antwort
1
Im Debugger müßtest eine Meldung à la "$rootScope is undefined" sehen - denn Du injectest $rootScope nur in das beforeEach-Setup, aber nicht in den eigentlichen Test. Der Aufruf geht dadurch ins Leere.

Hier ein funktionierendes Beispiel: http://plnkr.co/edit/VZ2Ns033iIma4Dm3N66e?p=info

(Genauer: es funktioniert der jasmine-Test. Das ng-click auf dem Button im "produktiven" Teil funktioniert nur, wenn man die Spec nicht mit lädt.)
05.05.2014
Matthias Hlawatsch 13,2k 4 9
Vielen Dank
Smartin 06.05.2014

Stelle deine Unit-testing-Frage jetzt!