2015-05-25 5 views
5

ich meine Jasmin Upgrade 1,3-2,0 so ich einen benutzerdefinierten Matcher hinzugefügt CSS zu überprüfen present.Below ist der Code die MatcherJasmin 2 benutzerdefinierte Matcher für hasClass in Protactor

hasClass = function(actual,expected){ 
    return actual.getAttribute('class').then(function (classes) { 
      return classes.split(' ').indexOf(expected) !== -1; 
     }); 
} 

zu überprüfen, aber wenn ich ein Upgrade auf Jasmin 2 dann wirft Versprechen Fehler von protactor wie es Gegenzug erwarten, aber unterhalb ist async Prozess

hasClass = function(){ 
    return compare: function(actual,expected){ 
     return actual.getAttribute('class').then(function (classes) { 
       return {pass: classes.split(' ').indexOf(expected) !== -1}; 
      }); 
    } 
} 

wie kann ich testen Klasse im Element vorhanden ist, ich will nicht Jasmin-jquery verwenden ??

+0

nur zu fragen, warum brauchen Sie hasClass? Ich habe es auch schon vor einiger Zeit benutzt, aber dann wurde mir klar, dass das Ziel der E2E-Tests von Protractor darin besteht, Funktionalität zu testen, nicht die interne Implementierung. So kann z. B. das div immer noch diese Klasse haben, aber es funktioniert nicht richtig, und dann muss nicht überprüft werden, ob es die Klasse hat oder nicht. –

+0

@IgorShubovych es hängt davon ab, sagen Sie etwas klicken und Sie möchten andere div dann zeigen, wie Sie es testen aur lassen Sie sagen, dass gleiche div Erfolg Farbe und Fehlerfarbe dann wie Sie in verschiedenen Szenario testen – Arpit

+0

expect (field.getCssValue ('border- Farbe ')) .be (' rgb (242, 88, 5) '); –

Antwort

6

Die pass sollte ein Versprechen sein, nicht in einem gelöst. Versuchen Sie, dies in Ihrem :

this.addMatchers({ 
    hasClass: function() { 
     return { 
      compare: function(actual, expected) { 
       return { 
        pass: actual.getAttribute('class').then(function(classes) { 
         return classes.split(' ').indexOf(expected) !== -1; 
        }) 
       }; 
      } 
     }; 
    } 
}); 
+0

Ich habe durch den Jasmine 2-Code gegraben, und ich sehe nicht, wo es Promises behandelt. Stattdessen scheint es nur die Gesamtwahrheit von "pass" zu untersuchen (und ein Promise-Objekt wird immer wahr erscheinen, unabhängig davon, wie es tatsächlich verrechnet wird/fehlschlägt). Sind Sie sicher, dass dies wie erwartet funktioniert, anstatt immer zu passieren? – Brian

+0

Der Winkelmesser überschreibt Jasmine, damit dieser funktioniert. Der gesuchte Code ist in [jasminewd] (https://github.com/angular/jasminewd/tree/jasminewd2) –