Jasmine的单元测试用例

时间:2015-11-11 03:16:21

标签: angularjs code-coverage karma-jasmine karma-coverage grunt-contrib-jasmine

我正在尝试为循环中的if条件编写测试用例,但是我没有将它作为过滤器的一部分。有什么方法可以测试循环中的if条件。我的测试用例根本不执行这行代码。

以下是我的控制器代码

   $scope.init = function()
   {
for (var i = 0; i < $scope.tempdata.length; i++) { //mapping of the status   to text

            if ($scope.tempdata[i].Status == 'U') {
                    $scope.statusText = 'text1';

                }
                if ($scope.tempdata[i].Status == 'A' || $scope.tempdata[i].Status == 'W') {
                    $scope.statusText = 'text2';
                }
                if ($scope.tempdata[i].Status == 'F') {
                    $scope.statusText = 'text3';
                }
                if ($scope.tempdata[i].Status == 'P') {
                    $scope.statusText = 'text4';
                }
                if ($scope.tempdata[i].Status == 'E') {
                    $scope.statusText = 'text5';
                }
                if ($scope.tempdata[i].Status == 'S') {
                    $scope.statusText = 'text6';
                }
                  }
          }

以下是我的测试用例

 it('should set the status', function() {
   scope.responseSet = true;
   var mockTempData =[{'Status': 'F'}];
    scope.tempdata = mockTempData
    scope.init();  
    expect(scope.statusText).toBe(text3);
});

当我运行业力时,我的测试用例失败,预期''为text3。

1 个答案:

答案 0 :(得分:2)

更容易判断你是否表明你是如何注射&#34;范围进入控制器测试。但是,我发现调试我的单元测试非常有帮助,仔细地逐步完成它们并确保一切都如我所期望的那样。

你还应该有你的最后一行

expect(scope.statusText).toBe('text3');

请注意,测试代码中的text3应更改为&#39; text3&#39;因为这是实际控制器中的字符串,而不是变量名称。