如何在我的案例中为函数创建测试

时间:2015-05-13 19:55:45

标签: javascript angularjs unit-testing

我正在尝试在我的应用中测试超时功能。

在我的控制器中

$scope.$watch('toy',function(toyVar){
       if(toyVar == 1) {
        //do stuff       
        } else {
           $timeout(function() {
              $window.alert('toy is old');
           }, 3000);
        }
});

测试文件。

describe('test', function () {
    var ctrl, scope;    
    beforeEach(module('testApp'));
    beforeEach(inject(function (_$controller_, _$rootScope_) {
        scope = _$rootScope_.$new();

        ctrl = _$controller_('toyCtrl', {
            $scope: scope
        });
    }));

    describe('test here', function() {
        it('should check if timeout function works', function() {
            //not sure how to write test here.
        })
    })
});

我不确定如何编写$timeout部分代码的测试。任何人都可以帮我吗?非常感谢!

1 个答案:

答案 0 :(得分:1)

你需要做几件事情,确保在这种情况下执行它的唯一方法就是看看alert是否被解雇了。让我们看看那些东西:

  • 监视$window.alert以查看是否有人被叫。
  • toy设置不同于1
  • 的内容
  • 执行$digest以便$watch运行。
  • flush调用到$timeout以模拟时间过去并运行该功能。
  • 检查$window.alert是否确实运行,这意味着一切正常。

类似的东西:

it('should check if timeout function works', function() {
  spyOn($window, 'alert');
  $scope.toy = 2;
  $scope.$digest();
  $timeout.flush();
  expect($window.alert).toHaveBeenCalledWith('toy is old');
});

如果您真的不需要,请不要使用下划线语法。

看到它正常工作here