javascriptMVC對測試提供了強大的支援,通過使用FuncUnit,可以很容易的建立能在瀏覽器或者自動化啟動並執行功能和單元測試。在上一講中我們使用scaffolded命令,之後系統幫你建立了測試指令碼,這講我們將做下面的事情。
- 運行單元測試.
- 理解單元測試.
- 運行功能測試.
- 理解功能測試.
- 測試isTasty功能.
運行單元測試
FuncUnit使用QUnit對model和基本外掛程式進行測試,你可以在瀏覽器或者Envjs運行測試。
在瀏覽器中運行
開啟cookbook/qunit.html頁面,你會看到下面的結果:
在EnvJs中運行
EnvJs是Rhino基於javascript的瀏覽器,FuncUnit可以在類比的環境中運行測試。在命令列輸入下面的命令:
js funcunit/run envjs cookbook/qunit.html
他會在類比的瀏覽器中運行測試。
理解單元測試
FuncUnit使用QUnit來做斷言,並把他們組織成測試和模組,你可以從QUnit's documentation瞭解到單元測試更多的內容。
cookbook/qunit.html載入steal,並通過他載入cookbook/test/qunit/qunit.js,qunit.js載入你的測試檔案:
cookbook/test/qunit/cookbook_test.js
cookbook/test/qunit/recipe_test.js
那些檔案依賴funcunit/qunit檔案的載入,當所有檔案載入完畢之後運行測試。開啟cookbook/test/qunit/recipe_test.js檔案,我們來看他都做了些什麼:
//建立測試test("findAll", function(){ //防止下一個測試回合 stop(2000); //請求recipes Cookbook.Models.Recipe.findAll({}, function(recipes){ //判斷recipes是否存在 ok(recipes) //確定我們至少有一個 recipe ok(recipes.length) //確定 recipe 正常 ok(recipes[0].name) ok(recipes[0].description) //運行下一個測試回合 start() });})
運行功能測試
功能測試用於測試那些和使用者互動的請求,例如測試監聽了click、鍵盤事件的外掛程式。cookbook的功能測試主要測試recipe的建立和展示外掛程式。
在瀏覽器中運行
開啟cookbook/funcunit.html頁面,他開啟一個新的頁面進行自動化測試,最後顯示的結果:
在Selenium中運行
Selenium可以自動載入瀏覽器,他已經整合到FuncUnit中了。在命令視窗運行下面的命令:
> js funcunit\run selenium cookbook\funcunit.html
如果你遇到什麼問題,就需要到FuncUnit documentation中找答案了。
理解FuncUnit測試
FuncUnit擴充了QUnit,提供了開啟頁面的功能,我們開啟cookbook/cookbook.html頁面,他的功能類似於qunit.html,但是他加入了funcunit。“$”是jquery的別名,我們來看他實現了什麼功能:
test("create recipes", function(){ //在 name 中輸入Ice S("[name=name]").type("Ice") //在 description 中輸入Cold Water S("[name=description]").type("Cold Water") //點擊 submit 按鈕 S("[type=submit]").click() //等待,直到第二個 recipe 出現 S('.recipe:nth-child(2)').exists() //得到第一個 td 的內容 S('.recipe:nth-child(2) td:first').text(function(text){ //確定他包含 ice ok(text.match(/Ice/), "Typed Ice"); });})
FuncUnit執行了很多非同步作業,如:click和keypresses之後執行斷言。FuncUnit的目標就是提供可讀的和線性文法。FuncUnit語句會實際儲存並會非同步執行,有時候會要求在回呼函數中擷取頁面的資料。
javascriptMVC教程目錄