S'appuyant sur this tutoriel pour tester une application angularjs avec chai, je souhaite ajouter un test pour une valeur non dé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é 'devrait' ou 'non défini", 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"?
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é.
Le documentation donne quelques solutions, par exemple:
var should = require('chai').should();
db.get(1234, function (err, doc) {
should.not.exist(err);
should.exist(doc);
doc.should.be.an('object');
});
should.equal(testedValue, undefined);
comme mentionné dans la documentation chai
Test pour indéfini
var should = require('should');
...
should(scope.play(10)).be.undefined;
Test pour null
var should = require('should');
...
should(scope.play(10)).be.null;
Test de falsification, c'est-à-dire traité comme faux dans des conditions
var should = require('should');
...
should(scope.play(10)).not.be.ok;
(typeof scope.play(10)).should.equal('undefined');
J'ai eu du mal à écrire l'instruction should pour des tests non définis. Ce qui suit ne fonctionne pas.
target.should.be.undefined();
J'ai trouvé les solutions suivantes.
(target === undefined).should.be.true()
si peut aussi l'écrire comme vérification de type
(typeof target).should.be.equal('undefined');
Je ne sais pas si ce qui précède est la bonne façon, mais cela fonctionne.
Essaye ça:
it ('cannot play outside the board', function() {
expect(scope.play(10)).to.be.undefined; // undefined
expect(scope.play(10)).to.not.be.undefined; // or not
});
La réponse de @ david-norman est correcte, conformément à la documentation. J'ai eu quelques problèmes d'installation et j'ai opté pour la suivante.
(typeof scope.play (10)). devrait.be.undefined;
N'oubliez pas une combinaison de mots-clés have
et not
:
const chai = require('chai');
chai.should();
// ...
userData.should.not.have.property('passwordHash');
Vous pouvez envelopper votre résultat de fonction dans should()
et tester un type "non défini":
it ('cannot play outside the board', function() {
should(scope.play(10)).be.type('undefined');
});