Ich möchte mit Jasmin das ‚ng-klicken Sie auf‘ Ereignis in Winkel testen, aber ich weiß nicht, wie, wie Sie testen ‚ng Sie auf‘ Ereignis in der Richtlinie mit Jasmin
Meine Richtlinie Datei wie folgt ist (headbarDirective.js):
(function() {
angular.module('app.widgets.homeHeadbar',[])
.directive('homeHeadbar', homeHeadbar);
function homeHeadbar() {
return {
restrict: 'EAC',
replace: true,
transclude: false,
scope: {
name: '@',
role: '@',
},
templateUrl: 'app/widgets/headbar/headbarView.html',
link: function(scope, ele, attrs) {
if (!scope.name) {
scope.logined = false;
} else {
scope.logined = true;
}
scope.logout = function() {
UserService.logout();
$location.path('/login');
};
}
};
}
})();
meine Vorlagendatei wie diese (headbarView.html):
<nav>
<div>
<div class="navbar-right" ng-show="logined">
<div class="dib fr ml20">
<div class="user-name cwh">{{name}}</div>
<div class="user-position cgray">{{role}}</div>
</div>
<a class="logout" href="javascript:;" ng-click="logout()">Log Out</a>
</div>
</div>
</nav>
und meine Testdatei ist wie folgt (test.js):
describe('test the headbarDirective',function(){
beforeEach(module('templates','app','app.widgets.homeHeadbar'));
var scope,ele,compile,simpleHtml,UserService,location;
beforeEach(inject(function(_$rootScope_,_$compile_,_UserService_,_$location_){
compile = _$compile_;
scope = _$rootScope_.$new();
location = _$location_;
UserService = _UserService_;
}));
it('test the logout click',function(){
simpleHtml = '<home-headbar name="John" role=2></home-headbar>';
ele = compile(angular.element(simpleHtml))(scope);
scope.$digest();
spyOn(UserService,'logout').and.callThrough();
$(ele).find('.logout').click();
scope.$digest();
expect(UserService.logout).toHaveBeenCalled();
});
});
und der Test fehlgeschlagen, Konsole Ergebnis wie folgt aus:
Chrome 43.0.2357 (Windows 7 0.0.0) test the headbarDirective test the logout cli
ck FAILED
Expected spy logout to have been called.
at Object.<anonymous> (C:/Users/IBM_ADMIN/desk/workspace/WaterFundWe
b/WebContent/test/unit/widgets/headbar/headbarDirective.js:48:30)
Chrome 43.0.2357 (Windows 7 0.0.0): Executed 11 of 11 (1 FAILED) (0 secs/0.124
Chrome 43.0.2357 (Windows 7 0.0.0): Executed 11 of 11 (1 FAILED) (0.125 secs/0
.124 secs)
bedeutet, dass die Logout-Funktion aufgerufen worden ist. ist etwas mit meinem Code nicht in Ordnung, wie könnte ich das ng-click Event testen?
fühlen sich frei, es funktioniert! Ich habe nicht das richtige '' Element, das das Problem hat. Ihr Code ist so detailliert, vielen Dank –
** In meinem Fall 'el [0] .querySelector ('. Abmeldung')' geholfen. ** Konnte nicht herausfinden, warum '' 'find()' '' nur funktioniert auf HTML-Tags, aber nicht Klassen. Neben sehr sauberem und gut lesbarem Beispiel! Dzęnki! –
@NEXTLEVELSHIT - bitte lesen Sie https://docs.angularjs.org/api/ng/function/angular.element und zusätzliche Anmerkung "** Beachten Sie, dass diese Funktion keine Elemente nach Tag-Name/CSS-Selektor findet. ** " –