unitarios unitarias unit test pruebas node framework javascript angularjs testing chai

unitarias - test unitarios javascript



Chai: cómo probar indefinido con la sintaxis ''should'' (9)

Esta es una de las desventajas de la sintaxis should. Funciona agregando la propiedad should a todos los objetos, pero si un valor devuelto o variable no está definido, no hay un objeto para mantener la propiedad.

La documentation proporciona algunas soluciones, por ejemplo:

var should = require(''chai'').should(); db.get(1234, function (err, doc) { should.not.exist(err); should.exist(doc); doc.should.be.an(''object''); });

Sobre la base de this tutorial que prueba una aplicación angularjs con chai, deseo agregar una prueba para un valor indefinido utilizando el estilo "should". Esto falla:

it (''cannot play outside the board'', function() { scope.play(10).should.be.undefined; });

con el error "TypeError: no se puede leer la propiedad ''should'' de undefined", pero la prueba pasa con el estilo "expect":

it (''cannot play outside the board'', function() { chai.expect(scope.play(10)).to.be.undefined; });

¿Cómo puedo hacer que funcione con "debería"?


La respuesta de @ david-norman es correcta según la documentación, tuve algunos problemas con la configuración y opté por lo siguiente.

(typeof scope.play (10)). should.be undeined;


Luché para escribir la declaración de deber para pruebas indefinidas. Lo siguiente no funciona.

target.should.be.undefined();

Encontré las siguientes soluciones.

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

si también puede escribirlo como una verificación de tipo

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

No estoy seguro si lo anterior es la manera correcta, pero funciona.

De acuerdo con Post from ghost in github


No se olvide de una combinación de have y not palabras clave:

const chai = require(''chai''); chai.should(); // ... userData.should.not.have.property(''passwordHash'');


Prueba esto:

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


Prueba para indefinido

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

Prueba de nulo

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

Prueba de faly, es decir, tratado como falso en condiciones

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


Puede ajustar el resultado de su función en should() y probar para un tipo de "indefinido":

it (''cannot play outside the board'', function() { should(scope.play(10)).be.type(''undefined''); });


(typeof scope.play(10)).should.equal(''undefined'');


should.equal(testedValue, undefined);

como se menciona en la documentación de chai