web-dev-qa-db-fra.com

Test par exemple de l'utilisation de Jasmine

Je suis nouveau sur Jasmine et je teste en général. Un bloc de mon code vérifie si ma bibliothèque a été instanciée à l'aide du nouvel opérateur:

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

Comment puis-je tester cela en utilisant Jasmine?

40
Mike Rifgin

Jasmine utilise des comparateurs pour faire ses assertions, vous pouvez donc écrire votre propre matcher personnalisé pour vérifier tout ce que vous voulez, y compris une vérification instanceof. https://github.com/pivotal/jasmine/wiki/Matchers

En particulier, consultez la section Écriture de nouveaux correspondants.

3
Jeff Storey

Pour vérifier si quelque chose est un instanceof [Object] Jasmine fournit désormais jasmine.any :

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

Je préfère l'utilisation plus lisible/intuitive (à mon avis) avec l'opérateur instanceof .

class Parent {}
class Child extends Parent {}

let c = new Child();

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

Dans un souci d'exhaustivité, vous pouvez également utiliser la propriété prototype constructor dans certains cas.

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

// ...

[~ # ~] attention [~ # ~] que cela ne fonctionnera pas si vous devez vérifier si un objet a hérité d'un autre ou non.

class Parent {}
class Child extends Parent {}

let c = new Child();

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

Si vous avez besoin de la prise en charge de l'héritage, utilisez certainement l'opérateur instanceof ou la fonction jasmine.any () comme Roger suggéré.

Object.prototype.constructor référence.

28
Francesco Casula