javascript - test - karma js
Jazmín para ser indefinido (2)
El problema es ese
expect(obj).toBeUndefined();
Falla incluso antes de que la llamada a Jasmine ocurra Es erróneo referirse a una variable que no está definida (al menos en los navegadores nuevos o en el modo "estricto").
Intente esta configuración en su lugar:
it(''should not be defined using .tobeUnefined()'', function() {
var obj = {};
expect(obj.not_defined).toBeUndefined();
});
En ese código, hay una variable "obj" cuyo valor es un objeto vacío. Está bien en JavaScript referirse a una propiedad inexistente de un objeto, y debido a que dicha referencia resulta undefined
la prueba pasará. Otra forma de hacerlo sería:
it(''should not be defined using .tobeUnefined()'', function() {
var no_value;
expect(no_value).toBeUndefined();
});
Soy nuevo en Jasmine y asumí que al usar las .not.toBeDefined()
o .toBeUndefined()
usted podría verificar si una variable undefined
está undefined
:
describe(''toBeDefined'', function() {
it(''should be defined'', function() {
var obj = {};
expect(obj).toBeDefined(); // Passes
});
it(''should not be defined using .not.tobeDefined()'', function() {
//var obj = {};
expect(obj).not.toBeDefined(); // Fails // ReferenceError: obj is not defined
});
it(''should not be defined using .tobeUnefined()'', function() {
//var obj = {};
expect(obj).toBeUndefined(); // Fails // ReferenceError: obj is not defined
});
});
Entiendo completamente que esto fallaría dentro del código, pero asumí que usando esas coincidencias, no lo haría. ¿Estoy utilizando mal estos, o no es posible escribir una especificación para verificar si algo undefined
está undefined
?
Tenga en cuenta que su error dice que obj is not defined
.
No dice que obj no está definido .
undefined es en realidad un tipo de datos en Javascript.
A cualquier variable declarada sin una asignación se le asigna un valor de indefinido por defecto, pero esa variable debe ser declarada.
Entonces, cuando Jasmine prueba si un valor no está definido , es determinante si obj === undefined
.
Si usted declara
var obj;
entonces obj
probará como indefinido.
Si no declara obj
, entonces no hay nada que el comparador de Jasmine pueda comparar con el tipo de datos no definido .