Jasmin.clock().tick() funktioniert nicht mit $timeout und debounce, aber funktioniert gut mit setTimeout

Unten habe ich 3 Funktionen, die genau das tun die gleiche Sache. Jeder verwendet eine andere Art von aufrufen von setTimeout, delay1() verwendet, setTimeout direkt, delay2() verwendet angularjs $timeout und delay3() verwendet, lodash debounce. Sie alle funktionieren.

Probleme tritt auf, wenn ich den test mit Jasmin. setTimeout funktioniert gut mit Jasmin.clock().tick () - Methode, $timeout und debounce nicht

Ich bin daran interessiert, debounce arbeiten mit Jasmin. Ich weiß, dass ich verwenden können, $timeout.flush() mit angularjs aber $timeout und setTimeout mir Probleme an anderer Stelle in meinem code, wo ich es mit mit leaflet maps. debounce funktioniert gut, mit Packungsbeilage.

Habe ich eine plunker hier: plnkr wo sehen Sie die $timeout und debounce-tests nicht übergeben, während die setTimeout-test übergibt.

Gibt es eine Möglichkeit, kann ich dieses problem umgehen? Dank

JS

var app = angular.module('plunker', []);

app.controller('MainCtrl', function($scope, $timeout) {
  $scope.name = 'World';
  $scope.delayed1 = function(){
    setTimeout(function(){
      $scope.name = "Hello world by setTimeout";
    },500)
  }
  $scope.delayed2 = function(){
    $timeout(function(){
      $scope.name = "Hello world by $timeout";
    },500)
  }
  $scope.delayed3 = function(){
    _.debounce(function(){
      $scope.name = "Hello world by debounce";
    },500)
  }
});

spec

describe('Testing a Hello World controller', function() {
  var $scope = null;
  var ctrl = null;

  //you need to indicate your module in a test
  beforeEach(module('plunker'));

  beforeEach(inject(function($rootScope, $controller) {
    $scope = $rootScope.$new();

    ctrl = $controller('MainCtrl', {
      $scope: $scope
    });
  }));

  it('should say hallo to the World', function() {
    expect($scope.name).toEqual('World');
  });
  it('should say Hello world by setTimeout', function() {
    jasmine.clock().install();
    $scope.delayed1();
    jasmine.clock().tick(600);
    expect($scope.name).toEqual('Hello world by setTimeout');
    jasmine.clock().uninstall();

  });
  it('should say Hello world by timeout', function() {
    jasmine.clock().install();
    $scope.delayed2();
    jasmine.clock().tick(600);
    expect($scope.name).toEqual('Hello world by timeout');
    jasmine.clock().uninstall();

  }); 
  it('should say Hello world by debouce', function() {
    jasmine.clock().install();
    $scope.delayed3();
    jasmine.clock().tick(600);
    expect($scope.name).toEqual('Hello world by debouce');
    jasmine.clock().uninstall();

  }); 
});
  • jede Schlussfolgerung, die auf dieser?
  • Nein, noch nicht. Irgendjemand?
InformationsquelleAutor ZeroOne | 2014-08-01
Schreibe einen Kommentar