En me basant sur ce tutoriel testant une application angularjs avec chai, je souhaite ajouter un test pour une valeur indéfinie en utilisant le style "devrait". Cela échoue:
it ('cannot play outside the board', function() {
scope.play(10).should.be.undefined;
});
avec l'erreur "TypeError: Impossible de lire la propriété 'should' of undefined", mais le test réussit avec le style "expect":
it ('cannot play outside the board', function() {
chai.expect(scope.play(10)).to.be.undefined;
});
Comment puis-je le faire fonctionner avec "devrait"?
javascript
angularjs
testing
chai
thebenedict
la source
la source
assert.isUndefined(scope.play(10))
Réponses:
C'est l'un des inconvénients de la syntaxe should. Cela fonctionne en ajoutant la propriété should à tous les objets, mais si une valeur de retour ou une valeur de variable n'est pas définie, il n'y a pas d'objet pour contenir la propriété.
La documentation propose des solutions de contournement, par exemple:
la source
should.not.exist
validera si la valeur estnull
telle que cette réponse n'est pas correcte. a la réponse @ Daniel ci - dessous:should.equal(testedValue, undefined);
. Cela devrait être la réponse acceptée.comme mentionné dans la documentation chai
la source
.equal()
. Je peux comprendre pourquoi @OurManInBananas a demandé une explication. C'est une utilisation inattendue de should en tant que fonction acceptant deux arguments, au lieu de la forme de méthode chaînée attendue acceptant un seul argument pour la valeur attendue. Vous ne pouvez y parvenir qu'en important / exigeant et attribuant une version invoquée de.should()
comme décrit dans la réponse acceptée par @DavidNorman et dans cette documentation ..equal
syntaxe produit de bien meilleurs messages d'erreur car elle vous permet de générer des messages plus descriptifs lorsque les choses échouentTester pour undefined
Tester la valeur nulle
Test de faux, c'est-à-dire traité comme faux dans des conditions
la source
la source
J'ai eu du mal à écrire l'instruction should pour les tests non définis. Ce qui suit ne fonctionne pas.
J'ai trouvé les solutions suivantes.
if peut également l'écrire comme un contrôle de type
Je ne sais pas si ce qui précède est le bon moyen, mais cela fonctionne.
Selon le message de fantôme dans github
la source
Essaye ça:
la source
La réponse de @ david-norman est correcte selon la documentation, j'ai eu quelques problèmes avec l'installation et j'ai plutôt opté pour ce qui suit.
(typeof scope.play (10)). should.be.undefined;
la source
typeof
l'opérateur renvoie une chaîne ; donc cette assertion n'a pas pu être passée; cuz'undefined' !== undefined
N'oubliez pas une combinaison de mots
have
-not
clés et :la source
Vous pouvez encapsuler le résultat de votre fonction
should()
et tester un type "indéfini":la source