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?
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:
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.
Tags und Links javascript unit-testing jasmine matcher