检查是否使用karma jasmine从其他函数调用函数

时间:2016-04-20 12:42:15

标签: angularjs jasmine karma-runner

我正在为角度应用编写单元测试。 我能够检查范围中定义的函数,但不能检查范围内没有的函数。

示例:

控制器:

     $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 ..

2 个答案:

答案 0 :(得分:2)

不确定是否可以这样做,因为您的功能是控制器专用的。

与大多数单元测试一样,测试私有方法应该通过提供的接口来完成,因此$scope.showSuccessPopup的测试也应该以某种方式测试私有方法。这样可以保持界面清洁,并且意味着它们可以维护。

我认为你需要检查为什么函数是私有的,如果是,它应该只通过公共($scope)方法进行测试。 我不确定检查功能是否存在的价值 - 我想这对您有价值 - 但是单元测试通常基于一个已知的接口,该接口应该驱动整个组件,以便达到100%的覆盖率。

答案 1 :(得分:1)

JS中无法访问函数范围内的本地函数和变量。应该公开预期要测试的每个函数和变量。

没有'安全'在客户端JS。封装的唯一目的是使开发人员的生活更轻松,并且当封装干扰测试时,封装失败了。

考虑使用私有范围方法/属性的_约定来达到规范:

$scope._setShowSuccess = () => {
  $scope.showsuccess = false;
}