AngularJS $timeout函数没有在我的Jasmine规范中执行

前端之家收集整理的这篇文章主要介绍了AngularJS $timeout函数没有在我的Jasmine规范中执行前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我试图用Jasmine测试我的AngularJS控制器,使用Karma。但一个$ timeout在现实生活中很好,崩溃了我的测试。 @H_301_1@控制器:

var Ctrl = function($scope,$timeout) {
  $scope.doStuff = function() {
    $timeout(function() {
      $scope.stuffDone = true;
    },250);
  };
};
@H_301_1@Jasmine它块(其中$ scope和控制器已经正确初始化):

it('should do stuff',function() {
  runs(function() {
    $scope.doStuff();
  });
  waitsFor(function() { 
    return $scope.stuffDone; 
  },'Stuff should be done',750);
  runs(function() {
    expect($scope.stuffDone).toBeTruthy();
  });
});
@H_301_1@当我在浏览器中运行我的应用程序时,$ timeout函数将被执行,$ scope.stuffDone将为true。但是在我的测试中,$ timeout什么都不做,该函数从不执行,Jasmine在超时750 ms后报告错误。这里可能有什么错误

根据用于 $timeout的Angular JS文档,您可以使用$ timeout.flush()来同步刷新延迟函数的队列。 @H_301_1@尝试将测试更新为:

it('should do stuff',function() {
  expect($scope.stuffDone).toBeFalsy();
  $scope.doStuff();
  expect($scope.stuffDone).toBeFalsy();
  $timeout.flush();
  expect($scope.stuffDone).toBeTruthy();
});
@H_301_1@这里是一个plunker显示了你的原始测试失败和新的测试通过。

猜你在找的Angularjs相关文章