作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用 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);
-威尔
最佳答案
好的,昨天有点晚了,我现在明白你的问题了,你想做的是检查变量是否被定义,对吧?
执行此操作的唯一方法是typeof x === 'undefined'
。
typeof
运算符允许使用不存在的变量。
因此,为了使其工作,您需要上述表达式并将其插入到正常的 true/false
断言中。
例如(没有使用过 YUI3):
Y.Assert.isTrue(typeof x === 'undefined', "fail message"); // isUndefined
Y.Assert.isFalse(typeof x === 'undefined', "fail message"); // isNotUndefined
关于javascript - 如何在YUI3中使用Assert.isUndefine()和Assert.isNotUndefine()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4637458/
我是一名优秀的程序员,十分优秀!