Bir yönerge birim testinde bir hizmet nasıl enjekte edilir Bazı enjekte edilen servislere yapılan bazı çağrıları yapan bir yönergeyi test etmem gerekiyor. Aşağıdaki kod parçası, olayları dinleyen ve belirtilen bir öğenin içine enter tuşuna basıldığında tarayıcıyı yönlendiren örnek bir direktiftir.AngularJS
Düzenleme: E2E test arazisinde yattığımı hissedebiliyorum?
angular.module('fooApp')
.directive('gotoOnEnter', ['$location', function ($location) {
var _linkFn = function link(scope, element, attrs) {
element.off('keypress').on('keypress', function(e) {
if(e.keyCode === 13)
{
$location.path(scope.redirectUrl);
}
});
}
return {
restrict: 'A',
link: _linkFn
};
}]);
sorun Ben direktifleri onlara casusluk servisleri enjekte nasıl çözemedim olmasıdır.
Benim çözüm önerisi şöyle görünür: beklendiği gibi ben gözetlemek için başarılı bir $locacion
hizmeti enjekte yönetilen değil çünkü, çalışmıyor .
describe('Directive: gotoOnEnter', function() {
beforeEach(module('fooApp'));
var element;
it('should visit the link in scope.url when enter is pressed', inject(function ($rootScope, $compile, $location) {
element = angular.element('<input type="text" goto-on-enter>');
element = $compile(element)($rootScope);
$rootScope.redirectUrl = 'http://www.google.com';
$rootScope.$digest();
var e = jQuery.Event('keypress');
e.keyCode = 13;
element.trigger(e);
spyOn($location, 'path');
expect($location.path).toHaveBeenCalledWith('http://www.google.com');
}));
Bu, saplama süslemeleri mocks sağlamak veya herhangi bir hizmeti geçersiz kılmak için
Expected spy path to have been called with [ 'http://www.google.com' ] but it was never called.
. Gördüğünüz zaman, 'spyOn' çağrısını işlevin üstüne taşırsanız, amaçlanan şekilde çalışacağına inanıyorum. –