我正在尝试使用 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)
再次,我问:这不会破坏这些功能的目的,还是我误解了框架?
所以
x
未声明,因此不可直接测试,而
var x;
声明它,但未定义。最后
var x = function() {};
被声明和定义。
我认为对我来说缺少的是轻松说出的能力
Y.Assert.isNotUndeclared(x);
-会