我正在为角度应用编写单元测试。 我能够检查范围中定义的函数,但不能检查范围内没有的函数。
示例:
控制器:
$scope.showSuccessPopup=()=> {
$scope.showsuccess = true;
}
function setShowSuccess (){
$scope.showsuccess = false;
}
测试文件:
describe("Function implementation tests",() => {
it("Expect function to be defined", function () {
expect(scope.showSuccessPopup).toBeDefined(); //works well
});
});
效果很好。但是想知道如何检查 setShowSuccess 。
注意:我不想在范围内设置 setShowSuccess ..
答案 0 :(得分:2)
不确定是否可以这样做,因为您的功能是控制器专用的。
与大多数单元测试一样,测试私有方法应该通过提供的接口来完成,因此$scope.showSuccessPopup
的测试也应该以某种方式测试私有方法。这样可以保持界面清洁,并且意味着它们可以维护。
我认为你需要检查为什么函数是私有的,如果是,它应该只通过公共($scope
)方法进行测试。
我不确定检查功能是否存在的价值 - 我想这对您有价值 - 但是单元测试通常基于一个已知的接口,该接口应该驱动整个组件,以便达到100%的覆盖率。
答案 1 :(得分:1)
JS中无法访问函数范围内的本地函数和变量。应该公开预期要测试的每个函数和变量。
没有'安全'在客户端JS。封装的唯一目的是使开发人员的生活更轻松,并且当封装干扰测试时,封装失败了。
考虑使用私有范围方法/属性的_
约定来达到规范:
$scope._setShowSuccess = () => {
$scope.showsuccess = false;
}