Подтвердить что ты не робот

Жасмин в соответствии с определением

Я новичок в Jasmine и предположил, что с помощью совпадений .not.toBeDefined() или .toBeUndefined() вы можете проверить, есть ли переменная 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
    });

});

Я полностью понимаю, что это не сработает в коде, но я предполагал использовать эти совпадения, это не так. Я просто использую эти ошибки или не могу написать спецификацию, чтобы проверить, есть ли что-то undefined?

4b9b3361

Ответ 1

Проблема заключается в том, что

  expect(obj).toBeUndefined();

не удается до вызова Жасмин даже происходит. Ошибочно ссылаться на переменную, которая не определена (по крайней мере в новых браузерах или в "строгом" режиме).

Попробуйте выполнить эту настройку:

it('should not be defined using .tobeUnefined()', function() {
    var obj = {};
    expect(obj.not_defined).toBeUndefined(); 
});

В этом коде есть переменная "obj", значение которой является пустым. Это нормально в JavaScript, чтобы ссылаться на несуществующее свойство объекта, и потому, что такая ссылка приводит к undefined, тест пройдет. Другой способ сделать это:

it('should not be defined using .tobeUnefined()', function() {
  var no_value;

  expect(no_value).toBeUndefined();
});

Ответ 2

Обратите внимание, что ваша ошибка говорит, что obj is not defined.

Он не говорит, что obj undefined.

undefined - фактически тип данных в Javascript.

Любая объявленная переменная без назначения присваивается по умолчанию значение undefined, но эта переменная должна быть объявлена.

Итак, когда Жасмин проверяет, является ли значение undefined, оно определяет, если obj === undefined.

Если вы объявите

var obj;

то obj будет проверяться как undefined.

Если вы не объявляете obj, тогда нет ничего, чтобы совпадение Jasmine сравнивалось с типом данных undefined.