tutorial test run princess karma javascript jasmine

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 .