2015-04-03 289 views
3

當在模板內部有一個帶有ng-click屬性的按鈕時,我應該測試實際採取的動作的效果(單擊)還是附加到ng -click屬性,函數調用?Ng-click - 如何對行爲進行單元測試

換句話說,對於一個指令,有這樣的一個模板:

<div> 
    <button ng-click="game.start()">start</button> 
</div> 

我應該考什麼點擊做或做什麼game.start功能?

我知道後來函數game.start可以更改爲另一個。此外,可以刪除ng-click,並以不同的方式捕獲點擊事件。

用triggerHandler('click')進行單元測試很誘人,但是指令的模板也可以改變。這意味着我需要對DOM節點進行一些「證明」訪問,即通過id屬性。

爲了進行單元測試,我應該在節點上附加id屬性嗎?還是應該對問題採取不同的解決方法?

+0

那麼不會測試點擊與game.start函數是一樣的嗎? – Aaron 2015-04-03 20:01:01

+0

嗯,是的,沒有。現在是,但假設我想稍後重構代碼,並且我的game.start函數更改爲例如game.init。在這樣的情況下,我不得不重寫我的測試規範。在編寫行爲測試時,我根本不想這樣做。 – 2015-04-04 07:17:47

回答

0

在指令的情況下,我通常會通過dom單擊元素。你的情況在這裏:

it("performs some action when clicked", function() { 
    element.find("button").click(); 

    assert(something); 
}); 

直接調用處理程序將讓你通過的測試,即使你忘記添加ng-click指令,這是不是我通常希望。它還使您可以自由地重新命名處理程序方法,而無需調整測試,從而使其不易變脆。

如果模板變得非常複雜,並且您爲了測試而試圖添加ID,您可能需要考慮將該指令分解爲多個指令。

+0

我有一些不太複雜的模板,但仍然有兩到三個按鈕和不同的DOM節點。不幸的是,將指令分解爲多個編譯指令不是我的項目的解決方案:/ – 2015-04-04 07:22:34

+0

然後,我會選擇合適的選擇器,就像使用css設計按鈕時一樣。 – user1777136 2015-04-05 20:42:46