2016-06-13 11 views
0

Meine Richtlinie Link-Funktion unten gegeben -Jasmin arbeitet nicht für Link-Richtlinie über Dokument klicken Sie

link:function(scope,elem,attr){ 
      $(document).on("click",function(event){ 
       var target = $(event.target); 
       if(target.is('.detailBox') || target.closest('.detailBox').length){ 
        return; 
       } 
       scope.$emit('closeDetailBox'); 
       scope.$apply(); 
      }); 
     } 

Und mein Jasmin TC für die emit Prüfung unten angegeben wird -

it('Some other box click', function() { 
      spyOn($rootScope, '$emit'); 
      var theboxelement = '<button class="thebox"></button>'; 
      var thebox = $(theboxelement); 
      $('body').append(thebox); 
      var spyEvent = spyOnEvent('.thebox', 'click'); 

      thebox.trigger("click"); 
      expect($rootScope.$emit).toHaveBeenCalledWith('closeDetailBox',theboxelement); 
      thebox.remove(); 
     }); 

Die emit Ereignis sollte wurden ausgelöst und gefangen, aber es wurde nie ausgelöst. Ich bekomme den Fehler - "Expected spy $ emit wurde mit ['closeDetailBox' '] aufgerufen, aber es wurde nie aufgerufen."

Ich habe mit diesem Problem seit 2 Tagen beschäftigt, konnte nicht die Lösung erhalten, bitte Hilfe!

Antwort

2

Gemäß Ihrem Code, denke ich, müssen Sie die Link-Funktion aufrufen. Dann mach den Rest. Etwas wie mydirective.link(); Dies würde die folgenden Funktionsaufrufe auflösen, die Sie vornehmen.

Sie können sich wahrscheinlich auf die folgenden Punkte überprüfen, wenn die oben nicht funktioniert -

Sehen Sie, wenn Sie Ihre Modulabhängigkeiten richtig zu lösen sind.

Verwenden Sie das lokale Jasmin-Debugging. Dies ist wahrscheinlich der einfachste Weg, um Ihren Fluss zu überprüfen.

+0

Vielen Dank! Der Aufruf der Link-Funktion war alles was benötigt wurde. Jetzt funktioniert es wie ein Zauber. Vielen Dank. –

+0

@anandpatil können Sie zeigen, wie Sie Link-Funktion aufgerufen haben? Haben Sie Umfang, Element, AttrS Parameter übergeben? –

+0

Ich musste nur directed.link() verwenden, ohne irgendwelche Parameter, da ich sie in meiner Funktion nicht benötigt habe. Aber wenn Sie sie brauchen, müssen Sie sie weitergeben. –

0

Auf der Grundlage Ihrer Anweisung wird Ihr Ereignis aus dem Anwendungsbereich Ihrer Richtlinie ausgelöst. Sind Sie sicher, dass dies die $ emit-Funktion von $ rootScope auslösen würde?

Vielleicht sollten Sie $ Broadcast auf dem $ rootScope verwenden?

+0

Ich debuggte und sah, nach dem Trigger auf Jasmin-Code, es ist nicht Eingabe der Link-Code in der Direktive. Keine Ahnung warum! –

+0

Ist $ in Ihrer Anweisung mit jQuery verknüpft? – Paqman

+0

Ja, es ist mit jQuery verbunden –