2013-07-10 47 views
0

我有多個funcntions和$(document).ready(function())中的很多代碼。我正在使用jasmine來測試ready函數內部的函數以及ready()內部的代碼,但是當內部describe的測試用例被執行時,它不能訪問ready函數()中的代碼。

我有多種功能和內部的$(document)大量的代碼。就緒(函數())。我正在使用jasmine來測試ready函數內部的函數以及ready()內部的代碼,但是當內部describe的測試用例被執行時,它不能訪問ready函數()中的代碼。

$(document).ready(function() { 
    function testMe(){ 
     testVar = true; 
    } 
}); 

茉莉花測試套件

describe("test suite", function(){ 
    beforeEach(function() { 
     testme = false 
    }); 
    it("Test Alert Box Message For Change Modal", function() { 
     expect(testme).toEqual(true); 
    }); 
}); 

請提出需要用什麼辦法將採取上述方法。

回答

1

您未測試已運行的代碼。甚至是代碼的樣子。您正在測試代碼的功能。

在你的示例測試中,你有兩個問題。

  1. expect()正在檢查的testme價值,而不是你的變量testVar,這樣總是會失敗,因爲testme將不確定
  2. 你定義函數在$(document).ready(),但從來沒有真正執行。所以,即使你正在檢查正確的變量,這個值也不會被改變,因爲你沒有調用它。

Jasmine將在測試執行前準備好文檔,因此在此函數中包裝的代碼沒有問題。因此,您對$(document).ready()函數的測試應確保數據設置正確,事件處理程序已註冊等。

你可以窺探jQuery的on()功能,並確保它被傳遞正確的回調。間諜的調用數組獲取調用對象的副本,並且您將能夠檢查以確保使用適當的選擇器。回調本身將在單獨的測試用例中進行測試。或者您可以在測試頁面上設置一個html fixture,然後在以後的測試用例中自行調用這些事件。

的內部功能的存在於ready()功能是測試的範圍之外。您希望能夠更改/刪除這些內部函數,並重新運行測試以確保您沒有影響任何功能。如果函數不能在ready()函數之外執行,則它是一個實現細節,您不必擔心它。

相關問題