Я пытаюсь проверить наличие объявленной определенной функции с помощью инфраструктуры тестирования YUI3. В Safari и FireFox попытка использовать isNotUndefined, isUndefined или isFunction не удалась. Я ожидаю, что те вызовут исключение, которое может быть обработано тестовой средой.
Y
Object
Y.Assert
Object
Y.Assert.isNotUndefined(x, "fail message")
ReferenceError: Can't find variable: x
Y.Assert.isUndefined(x, "fail message")
ReferenceError: Can't find variable: x
Y.Assert.isFunction(x, "fail message")
ReferenceError: Can't find variable: x
Но вместо этого мне никогда не удается увидеть сообщения об ошибках, а остальные тесты не запускаются из-за мешающего интерпретатора ... Разве это не подрывает назначение этих функций или Я неправильно понимаю рамки?
Моя интуиция подсказывает мне, что, учитывая код выше и только код выше,
Y.Assert.isUndefined(x, "fail message")
должно продолжаться без ошибки (потому что x не объявлено) и
Y.Assert.isNotUndefined(x, "fail message")
должно регистрировать сообщение «сообщение об ошибке» (потому что x не объявлено).
Однако из-за ReferenceError нет способа (с помощью этих методов YUI3) проверить необъявленные объекты. Вместо этого у меня остался довольно уродливый код утверждения. Я не могу использовать
Y.Assert.isNotUndefined(x)
ReferenceError: Can't find variable: x
или
Y.assert( x !== undefined )
ReferenceError: Can't find variable: x
что оставляет меня с
Y.assert( typeof(x) !== "undefined" ) // the only working option I've found
Assert Error: Assertion failed.
, который гораздо менее читабелен, чем
Y.Assert.isNotUndefined(x)
Снова я спрашиваю: не подрывает ли это назначение этих функций или я неправильно понимаю структуру?
So
x
не объявлено и поэтому не может быть проверено напрямую, в то время как
var x;
объявляет это, но оставляет это неопределенным. Наконец
var x = function() {};
объявлен и определен.
Я думаю, что мне не хватает способности легко сказать
Y.Assert.isNotUndeclared(x);
-Wil