我想使用YUI3測試框架來測試聲明的已定義函數的存在。在Safari和FireFox中,嘗試使用isNotUndefined,isUndefined或isFunction失敗。我期望那些拋出一個可以由測試框架處理的異常。如何在YUI3中使用Assert.isUndefined()和Assert.isNotUndefined()?
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);
-Wil
顯示代碼,因此ReferenceError中沒有`x`中的變量。 – 2011-01-09 09:58:06