考虑下面的两个代码片段,取自angular docs on unit testing:
在 Angular 中,控制器与 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');
我想知道第二个代码片段是如何工作的。没有模拟 $scope 传递给它,但显然它有效。方法调用pc.password('abc');
andpc.grade()
似乎是 and 的别名$scope.password('abc')
,$scope.grade()
但是这些别名来自哪里?这是角度内置的东西吗?相当于ruby的method_missing?如果是这样,它是如何在引擎盖下工作的?