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?
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.
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));
});
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.