Sobre la base de este tutorial que prueba una aplicación angularjs con chai, quiero agregar una prueba para un valor indefinido usando 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 "esperado":
it ('cannot play outside the board', function() {
chai.expect(scope.play(10)).to.be.undefined;
});
¿Cómo puedo hacer que funcione con "debería"?
javascript
angularjs
testing
chai
el benedicto
fuente
fuente

assert.isUndefined(scope.play(10))Respuestas:
Esta es una de las desventajas de la sintaxis should. Funciona agregando la propiedad should a todos los objetos, pero si un valor de retorno o un valor de variable no está definido, no hay un objeto para mantener la propiedad.
La documentación ofrece algunas soluciones, por ejemplo:
fuente
should.not.existvalidará si el valor esnullasí que esta respuesta no es correcta. @ Daniel tiene la respuesta a continuación:should.equal(testedValue, undefined);. Esa debería ser la respuesta aceptada.como se menciona en la documentación de chai
fuente
.equal(). Puedo entender por qué @OurManInBananas pidió una explicación. Es un uso inesperado de should como función que acepta dos argumentos, en lugar de la forma de método encadenado esperado que acepta un solo argumento para el valor esperado. Solo puede lograr esto importando / solicitando y asignando una versión invocada de.should()como se describe en la respuesta aceptada por @DavidNorman y en esta documentación ..equalsintaxis produce mensajes de error mucho mejores porque le permite generar mensajes que son más descriptivos cuando las cosas fallanPrueba para indefinido
Prueba de nulo
Prueba de falsedad, es decir, tratada como falsa en condiciones
fuente
fuente
Luché para escribir la declaración should para pruebas indefinidas. Lo siguiente no funciona.
Encontré las siguientes soluciones.
si también puede escribirlo como una verificación de tipo
No estoy seguro de si lo anterior es la forma correcta, pero funciona.
Según Post de ghost en github
fuente
Prueba esto:
fuente
La respuesta de @ david-norman es correcta según la documentación, tuve algunos problemas con la configuración y en su lugar opté por lo siguiente.
(typeof scope.play (10)). should.be.undefined;
fuente
typeofel operador devuelve una cadena ; por lo que esta afirmación no se pudo aprobar; cuz'undefined' !== undefinedNo se olvide de una combinación de
haveynotpalabras clave:fuente
Puede ajustar el resultado de su función
should()y probar un tipo de "indefinido":fuente