考慮的下面的代碼在兩個片段,從the angular docs on unit testing採取:角度控制器:這些神奇的方法在這個單元測試中是如何工作的?
在角控制器是嚴格,這導致更簡單的可測性的故事,在這個例子中可以看出的DOM操作邏輯分隔:
function PasswordCtrl($scope) {
$scope.password = '';
$scope.grade = function() {
var size = $scope.password.length;
if (size > 8) {
$scope.strength = 'strong';
} else if (size > 3) {
$scope.strength = 'medium';
} else {
$scope.strength = 'weak';
}
};
}
和測試是直截了當
var pc = new PasswordCtrl();
pc.password('abc');
pc.grade();
expect(pc.strength).toEqual('weak');
我想知道第二個代碼片段是如何工作的。沒有模擬$範圍被傳遞給它,但顯然它的工作原理。此外,該方法調用pc.password('abc');
和pc.grade()
似乎是$scope.password('abc')
和$scope.grade()
的別名,但這些別名從何而來?這是東西內置角?一種等同於ruby的method_missing?如果是這樣,它是如何工作的?
您確定此測試有效嗎?你能否提供活躍的例子?它感覺很腥。 – 2013-05-11 09:46:46
它來自官方的角度文檔,正如我在OP中鏈接的那樣,所以我認爲它是有效的。他們沒有提供關於如何設置的細節,所以我沒有嘗試自己運行它。 – Jonah 2013-05-11 09:48:26
@ pkozlowski.opensource,另外,我看到你寫了一本關於angular的即將發佈的書,所以如果你有其他關於angular測試的單元測試教程的建議,我會很感激他們。 – Jonah 2013-05-11 10:05:47