Devrait js Ne peut pas lire bien "devrait", null
j'essaie d'utiliser l'outil de test de moka dans le nœud. Considérez le scénario de test suivant
var requirejs = require('requirejs');
requirejs.config({
//Pass the top-level main.js/index.js require
//function to requirejs so that node modules
//are loaded relative to the top-level JS file.
nodeRequire: require
});
describe('Testing controller', function () {
it('Should be pass', function (done) {
(4).should.equal(4);
done();
});
it('Should avoid name king', function (done) {
requirejs(['../server/libs/validate_name'], function (validateName) {
var err_test, accountExists_test, notAllow_test, available_test;
validateName('anu', function (err, accountExists, notAllow, available) {
accountExists.should.not.be.true;
done();
});
});
});
});
comme un résultat de test que j'ai obtenu:
$ make test
./node_modules/.bin/mocha \
--reporter list
. Testing controller Should be pass: 0ms
1) Testing controller Should avoid name anu
1 passing (560 ms)
1 failing
1) Testing controller Should avoid name anu:
Uncaught TypeError: Cannot read property 'should' of null
at d:\townspeech\test\test.spec.js:23:30
at d:\townspeech\server\libs\validate_name.js:31:20
at d:\townspeech\test\test.spec.js:22:13
at Object.context.execCb (d:\townspeech\node_modules\requirejs\bin\r.js:1869:33)
at Object.Module.check (d:\townspeech\node_modules\requirejs\bin\r.js:1105:51)
at Object.Module.enable (d:\townspeech\node_modules\requirejs\bin\r.js:1376:22)
at Object.Module.init (d:\townspeech\node_modules\requirejs\bin\r.js:1013:26)
at null._onTimeout (d:\townspeech\node_modules\requirejs\bin\r.js:1646:36)
at Timer.listOnTimeout [as ontimeout] (timers.js:110:15)
make: *** [test] Error 1
La première passe sans aucune complication, mais la deuxième, il semble que, qui ne pouvait pas fixer le module shouldjs. Pourquoi?
- C'est cus accountExists est nulle, et il n'y a pas de propriétés sur null. Pouvez-vous utiliser les attendre trop? Si oui
expect(accountExists).to.not.equal(true)
serait de travailler. - Vous pouvez également utiliser le devrait.pas.existent(accountExists);
Vous devez vous connecter pour publier un commentaire.
C'est un problème connu avec le
should
bibliothèque: Comme il s'étendobject
, bien sûr, il ne fonctionne que lorsque vous avez un objet concret. Commenull
, par définition, signifie que vous n'avez pas un objet, vous ne pouvez pas appeler une méthode sur elle ou d'accéder à ses propriétés.Donc,
should
n'est pas disponible dans ce cas.En gros, vous avez deux options pour la façon de traiter ce:
actual
etexpected
. De cette façon, aussi longtemps que vous ne vous attendez pasnull
, vous disposez d'un objet dans le début et peut donc accéder à sesshould
de la propriété. Mais, ce n'est pas agréable, de l'évolution de la sémantique, et ne fonctionne pas dans tous les cas.should
de la bibliothèque par une autre affirmation de la bibliothèque qui n'ont pas ce problème.Personnellement, j'irais avec l'option 2, et mon très subjective favori pour ce qui est nœud-assertthat (ce qui a été écrit par moi, c'est mon préféré).
De toute façon, il y a beaucoup d'autres options, telles que attendre. N'hésitez pas à utiliser l'un de ces affirmation bibliothèques qui convient le mieux à votre style d'écriture des tests.
should.exist
should.exist(object)
est la bonne méthode à appeler. Je ne peux pas réellement modifier mon commentaire de la pensée 🙁J'ai eu le même problème. Je l'ai résolu en utilisant:
(err === null).should.be.true;
(!res).should.be.ok();
true
est une fonction et doit être comme(err === null).should.be.true()
pour le faire fonctionner(err === null).should.equal(true)
serait plus agréable, parce quetrue
n'est pas un verbeVous pouvez utiliser directement
should.not.exist(err);
Uncaught TypeError: Object #<Affirmation> n'a pas de méthode 'existe pas"const should = chai.should();
de définirshould
.Une option de plus que je ne vois pas mentionné ici:
En vous exemple serait:
Je trouve toujours
expect
fonctionne mieux avecnull
etundefined
comme suit:expect(err).be.null