Жасмин в соответствии с определением
Я новичок в 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
?
Ответы
Ответ 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.