2013-07-16 4 views
25

Ich versuche, einen benutzerdefinierten Filter zu erstellen, um Ereignisse zu verfolgen. Der Filter kann also Methoden auf dem Segmentio-Service aufrufen.Wie injiziere ich einen Dienst als Abhängigkeit für einen benutzerdefinierten Filter in angular.js?

angular.module('sageApp') 
    .filter('trackEvent', function(segmentio) { 
    return function(entry, category) { 
    segmentio.track(entry, category); 
    } 
}); 

Der Segmentio-Dienst ist jedoch nicht verfügbar. Irgendwelche Ideen darüber, wie man einen Service einem Filter injiziert, werden sehr geschätzt.

+1

FYI, der obige Code funktioniert. –

Antwort

41

Versuchen:

app.filter('sageApp', ['segmentio', function(segmentio) { 
    return function(entry, category) { 
     segmentio.track(entry, category); 
    } 
}]); 
+2

Wie schreiben Sie jetzt einen Test für _sageApp_, der einen Mock injiziert _segmentio_ – shantanusinghal

+0

Überprüfen Sie einfach, ob die entsprechende Methode auf segmentio mockt Service aufgerufen wird, den Sie injizieren. –

+1

@SatheeshKumar Wie verspotten Sie die Abhängigkeiten des Filters? Ich kann anscheinend keine Mocks weitergeben, wenn ich einen Filter instanziiere ('$ filter ('name')' akzeptiert keine anderen Argumente). – JimmyBoh

3

Der Service wird getestet und funktioniert. Genau genommen habe ich mein Problem festgestellt, wenn die eckigen, manchmal chrome dev-Tools die Variablen in der Closure nicht anzeigen, wenn Sie einen Debugger zur Überprüfung hinzufügen. Als ich console.log (segmentio) gemacht habe, hat es gut funktioniert.

+0

passiert mir die ganze Zeit. Sie können nichts sehen, was nicht in einem Funktionsumfang verwendet wird, obwohl Sie intuitiv annehmen würden, dass Sie eine Variable außerhalb der Funktion untersuchen könnten, in diesem Fall innerhalb der 'return function (...'.) Aber sobald Sie dumy code schreiben 'var temp = segmentio', haben Sie etwas zu inspizieren. –

Verwandte Themen