web-dev-qa-db-de.com

Testen zum Beispiel mit Jasmine

Ich bin neu bei Jasmine und teste im Allgemeinen. Ein Block meines Codes überprüft, ob meine Bibliothek mit dem neuen Operator instanziiert wurde:

 //if 'this' isn't an instance of mylib...
 if (!(this instanceof mylib)) {
     //return a new instance
     return new mylib();   
 }

Wie kann ich das mit Jasmine testen?

40
Mike Rifgin

Jasmine verwendet Matcher, um ihre Behauptungen zu erstellen, sodass Sie Ihren eigenen Matcher schreiben können, um alles zu überprüfen, was Sie möchten, einschließlich einer Instanz der Prüfung. https://github.com/pivotal/jasmine/wiki/Matchers

Lesen Sie insbesondere den Abschnitt Neue Matcher schreiben.

3
Jeff Storey

Um zu überprüfen, ob etwas ein instanceof [Object] Ist, gibt Jasmine jetzt jasmine.any :

it("matches any value", function() {
  expect({}).toEqual(jasmine.any(Object));
  expect(12).toEqual(jasmine.any(Number));
});
82
Roger

Ich bevorzuge die lesbarere/intuitivere (meiner Meinung nach) Verwendung mit dem Operator instanceof .

class Parent {}
class Child extends Parent {}

let c = new Child();

expect(c instanceof Child).toBeTruthy();
expect(c instanceof Parent).toBeTruthy();

Der Vollständigkeit halber können Sie in einigen Fällen auch die Eigenschaft prototype constructor verwenden.

expect(my_var_1.constructor).toBe(Array);
expect(my_var_2.constructor).toBe(Object);
expect(my_var_3.constructor).toBe(Error);

// ...

[~ # ~] Achten Sie darauf, dass [~ # ~] dies nicht funktioniert, wenn Sie prüfen müssen, ob ein Objekt von einem anderen geerbt wurde oder nicht.

class Parent {}
class Child extends Parent {}

let c = new Child();

console.log(c.constructor === Child); // prints "true"
console.log(c.constructor === Parent); // prints "false"

Wenn Sie Vererbungsunterstützung benötigen, verwenden Sie auf jeden Fall den Operator instanceof oder die Funktion jasmine.any () wie Roger empfohlen.

Object.prototype.constructor Referenz.

28