105 votes

Chai: comment tester si une variable est indéfinie avec la syntaxe 'should'

S'appuyant sur ce tutoriel testant une application angularjs avec chai, je veux ajouter un test pour une valeur non définie en utilisant le style "should". Ceci échoue :

it ('ne peut pas jouer en dehors du plateau', function() {
  scope.play(10).should.be.undefined;
});

avec l'erreur "TypeError: Impossible de lire la propriété 'should' de non défini", mais le test passe avec le style "expect" :

it ('ne peut pas jouer en dehors du plateau', function() {
  chai.expect(scope.play(10)).to.be.undefined;
});

Comment puis-je le faire fonctionner avec "should" ?

87voto

David Norman Points 9156

C'est l'un des inconvénients de la syntaxe should. Elle fonctionne en ajoutant la propriété should à tous les objets, mais si une valeur de retour ou une valeur de variable est indéfinie, il n'y a pas d'objet pour contenir la propriété.

La documentation propose quelques solutions de contournement, 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');
});

62voto

daniel Points 650
should.equal(valeurTestée, undefined);

comme mentionné dans la documentation de chai

18voto

teddychan Points 21
(typeof scope.play(10)).devrait.égal('undefined');

18voto

Peter Dotchev Points 1769

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 pour faux, c'est-à-dire traité comme faux dans les conditions

var should = require('should');
...
should(scope.play(10)).not.be.ok;

12voto

Viraths Points 540

J'ai eu du mal à écrire l'instruction should pour les tests non définis. La suivante ne fonctionne pas.

target.should.be.undefined();

J'ai trouvé les solutions suivantes.

(target === undefined).should.be.true()

on peut aussi l'écrire comme une vérification de type

(typeof target).should.be.equal('undefined');

Je ne suis pas sûr si la méthode ci-dessus est correcte, mais elle fonctionne.

Selon le post de ghost sur github

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X