2014-12-06 111 views
1

我已經在Javascript中使用Date()編寫了自己的實現,BardyDate除了Date的所有屬性/方法外還有其他一些東西。爲什麼我這樣做確實是一個非常好的問題,但這是一個漫長的故事,我將在下雨天保存它。Javascript日期測試工具

但我在想可能會是能夠驗證它仍然行爲正確的日期。我對測試套件等一無所知,但想知道如何將Javascript日期對象的任何現有測試應用到我的BardyDate以顯示正確性?

任何建議非常歡迎。

+1

d[dateFunction]()重複日期的方法,和呼叫與日期相同的方法,看到它們產生相同的輸出。您將需要比較日期的字符串版本,因爲2個對象永遠不會相等。 – dandavis 2014-12-06 23:38:54

回答

0

我等待迴應,因爲我不確定沒有日期測試套件已經在那裏的JavaScript。我想給任何可能知道更多的人帶來懷疑。

但是,據我所知,這種測試將全部在瀏覽器構建/驗證中完成。當然可以使用該開發領域的一些現有測試套件,但我認爲這不是一件容易的任務。許多瀏覽器都有一個build process that you could fork(特別是你可以隔離他們的日期測試用例)。在他們的測試過程中,你將不得不爲Javascript日期對象找到給定的段,這將測試以確保w3規範的兼容性。

那麼,Selenium是創建單元測試的非常常用和實用的方法,並且如果設計良好的web應用程序集成測試(也可以連接到javascript)並且能夠生成有關測試結果的良好報告。

最後,累積性職位上的JavaScript測試庫可以在this post about Javascript TDD (Test Driven Design)

找到或者你可以做類似下面的(意味着是一個指引不是一個完整的解決方案 - 從dandavis評論啓發):

var epochTS = 0; 
var bd = new BardyDate(epochTS); 
var d = new Date(epochTS); 

Object.getOwnPropertyNames(Date.prototype).forEach(function(dateFunction){ 
    //in this if statement you are testing the functions like getTime() and getYear() 
    if(dateFunction.indexOf("get") == 0){ 
     console.log("dateFunction " + dateFunction + 
      "() pass: " + (bd[dateFunction]() === d[dateFunction]())) 
    } 
    //in this if statement you are testing the functions like toString() and toJSON() 
    if(dateFunction.indexOf("to") == 0){ 
     console.log("dateFunction " + dateFunction + 
      "() pass: " + (bd[dateFunction]() === d[dateFunction]())) 
    } 
    //then there are the 16 set methods, those you probably would want to hardcode. 
    //unless you are content with passing a hard coded value in like "10" -- the 
    //issue would be bounds testing, which you would likely want to hardcode. 
    //beyond the scope of this for-each loop. 
}) 

在上面的代碼做一點解釋

隨着Object.getOwnPropertNames(Date.prototype)您可以獲取012所有方法,儘管Date有財產DontEnumsee this post for more info)。

你也可以將每個函數的字符串作爲JavaScript對象中的一個關鍵,因此這要是dateFunction === "toString"會被解釋/編譯成d[toString]()這相當於d.toString()