我正在使用 Jasmine 为我们的控制器编写单元测试,但想获得社区关于如何处理这种情况的反馈......
我有一个控制器 - InvoiceController,如下所示:
angular.module('myModule').controller('myController', ['$scope',
function($scope) {
$scope.doSomething = function() {
$scope.something = 'bar';
};
}
]});
在我的单元测试中,我验证我的控制器是否具有预期的方法:
it('should be able to do some work', function() {
// initialize scope properties
scope.someProperty = 'foo';
// load controller using those properties
injectController();
// do I have all of the functions necessary to do this work?
expect(typeof (scope.doSomething)).toBe('function');
// now execute test
scope.doSomething();
expect(scope.something).toBe('bar');
}
最后,在我的 html 中,我有一个带有 ng-click 的元素,如下所示:
<button ng-click="doSomehing()">Do Something</button>
看起来不错,对吧?但是,有没有人发现我做错了什么?
我的 ng-click 方法拼写错误,但所有测试都是绿色的,生活似乎很美好……直到我尝试点击那个人,但没有任何反应。没有渲染时间错误,点击没有错误。唔。
现在有好几次,因为我正在重构代码,这让我受益匪浅。我在单元测试和控制器中将 doSomething 重命名为 doSomethingCooler,但在 html 中遗漏了一个位置。经过一分钟的挠头后,我看到了错过了什么。
我想要一种确保标记有效的方法。E2E 测试似乎是显而易见的解决方案,但它们很容易受到攻击,因此我们希望有一些替代方案。
如果这是 ASP.Net,我会从后面的代码中附加点击事件,这样我就会得到编译时错误和运行时错误。
想法??
萨德