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.exist
validará si el valor esnull
así 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 ..equal
sintaxis 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
typeof
el operador devuelve una cadena ; por lo que esta afirmación no se pudo aprobar; cuz'undefined' !== undefined
No se olvide de una combinación de
have
ynot
palabras clave:fuente
Puede ajustar el resultado de su función
should()
y probar un tipo de "indefinido":fuente