Gibt es eine Möglichkeit, Jasmine-Standard-Matcher in benutzerdefinierten Matchern zu verwenden?

8

Ich habe eine benutzerdefinierte Matcher in einigen Jasmine Testspezifikationen des Formulars:

%Vor%

Natürlich vergleicht actualItem.thing == elem eigentlich keinen Objektinhalt - ich muss eine der komplexeren Lösungen in Objektvergleich in JavaScript .

Ich kann nicht anders, als zu bemerken, dass Jasmine bereits einen netten Object Equality Checker hat: erwarte (x) .toEqual (y) . Gibt es eine Möglichkeit, das in einem benutzerdefinierten Matcher zu verwenden? Gibt es eine allgemeine Möglichkeit, Matchierer in benutzerdefinierten Matchern zu verwenden?

    
Fishtoaster 20.01.2012, 20:59
quelle

1 Antwort

5

Ja, es ist etwas hacky, aber durchaus möglich.

Als erstes müssen wir die Jasmine.Env-Klasse verfügbar machen. Persönlich habe ich dies in meiner SpecRunner.html getan, da es dort ohnehin schon eingerichtet ist. Auf der Last meines SpecRunner habe ich das folgende Skript, das läuft:

%Vor%

Nach der execJasmine -Funktionsdeklaration schiebe ich JasminEnv in den globalen Namensraum, indem ich Folgendes hinzufüge:

%Vor%

Nun kann ich in jeder meiner spec-Dateien auf die Variable jasmineEnv zugreifen, und das enthält den Kerncode der Matcher.

Mit toEqual wird die Funktion jasmine.Env.prototype.equals _ aufgerufen. Dies bedeutet, dass Sie in Ihrem customMatcher Folgendes tun können:

%Vor%

Leider können Sie mit dieser Methode nur auf folgende Methoden zugreifen:

  1. compareObjects _
  2. equals_
  3. enthält _

Der Rest der Matcher befindet sich in der Klasse Jasmine.Matchers, aber ich war noch nicht in der Lage, dies öffentlich zu machen. Ich hoffe, dass dir das auf die eine oder andere Weise hilft.

    
StevenMcD 27.01.2012, 21:47
quelle