2013-08-06 148 views
1

我在系統生命週期中反向工作。幾個月前,我寫了一個大型的JavaScript庫。然後我必須做到這一切客觀,現在,我必須爲它編寫單元測試。我正在使用Maven,並在我的pom.xml中有jasmine-maven-plugin。我遇到的問題是我應該寫什麼測試,以及有多少。我應該在Jasmine中編寫單元測試?

第一個例子很簡單。該函數接受一個字符串並返回大寫的第一個字母。

var toolsFn = { 
    capitaliseFirstLetter: function(string) { 
     return string.charAt(0).toUpperCase() + string.slice(1); 
    } 
}, 

等我單位測試:

describe("toolsFn - capitaliseFirstLetter", function() { 
    it("capitalises the first letter of a given string", function() { 
     expect(toolsFn.capitaliseFirstLetter("hello World!")).toBe("Hello World!"); 
    }); 
}); 

不過,我不確定我應該爲我的許多其他方法做什麼。他們中的大多數處理html代碼,例如更改選項卡,顯示通知,禁用/啓用控件。我應該只是期望方法toHaveBeenCalled還是有更多的呢?

請檢查以下示例,它會更改選項卡,加載給定選項卡並隱藏通知;

tabsFn = { 
    changeTab: function() { 
     $(tabButtons).addClass('inactive'); 
     $(tabContent).hide(); 
     $(this).removeClass('inactive'); 
     var tab = $(this).attr('tab'); 
     $('.tab-content-' + tab).show(); 
     return false; 
    }, 
    loadTab: function(tab) { 
     $(tabButtons).addClass('inactive'); 
     $(tabContent).hide(); 
     $('[tab~="' + tab + '"]').removeClass('inactive').removeAttr('disabled'); 
     $('.tab-content-' + tab).show(); 
    }, 

messageFn = { 
    hideNotification: function(time) { 
     $(messageFn.notificationBar).stop(true, true).fadeOut(time); 
    }, 

任何澄清是非常感謝。

回答

1

他們大多數處理html代碼,如更改選項卡,顯示通知,禁用/啓用控件。

如果生成的行爲是正確的(例如:內容已更改),那麼您要驗證的內容。這通常是通過集成測試來完成的,而Jasmine並不是集成測試的最佳工具。像Selenium這樣的工具可以更好地完成這種測試。

只要不陷入陷阱開始測試是否調用特定函數來驗證功能是否仍然正常工作。該功能的內部可以更改並調用其他功能,但這並不意味着它現在已經損壞。所以這就是爲什麼最好在更高層次上進行(集成測試)。

我遇到的問題是什麼,我應該寫測試,多少

通常情況下,你寫單元測試對於那些不打算更改應用程序的狀態,每個功能。您的大寫功能是單元測試功能的一個很好的例子。

至於有多少,這取決於你現在寫單元測試的時間以及將來必須維護它們的時間。你也必須記住每個測試的有用性。如果你正在測試的東西太微不足道了,那麼爲它做單元測試可能沒有價值。如果你有足夠的時間,測試函數的一個好方法是爲每個邊緣案例(第一個字母爲大寫的例子,一個很好的例子是一個空字符串,null或未定義的)一般情況下的測試。這將導致每個功能約2-4次測試。通過這種方式,您通常可以很好地覆蓋您的代碼。

+0

優秀答案謝謝,我真的很感謝解釋! – Patrick

相關問題