javascript - Testng a partally executed $timeout in AngularJS -
i have angularjs service. service uses $timeout in function. i'm trying figure out how test service in various situations. here code:
myapp.factory('myservice', ['$timeout', function($timeout) { var isrunning = false; var mytimer = null; return { mytimer: mytimer, isrunning: isrunning, execute: function(time) { this.isrunning = true; this.mytimer = $timeout( function() { this.isrunning= false; this.mytimer= null; }, time ); } }; }]);
now, i'm trying test code. have following written:
describe('myservice', function () { var myservice = null; var $timeout = null; var $rootscope = null; beforeeach(inject(function (_$timeout_, _$rootscope_, _myservice_) { myservice = _myservice_; $timeout = _$timeout_; $rootscope = _$rootscope_; })); it('should run 1 second', function() { myservice.execute(1000); $timeout.flush(); $rootscope.$digest(); expect(myservice.isrunning).tobe(false); }); });
the test "works". however, if 750 milliseonds have elapsed, expect myservice.isrunning
true
. however, not know how test scenario. can please show me how test tht situation? thank you
you can imitate amount of time passing $timeout.flush
method. method takes optional parameter called delay. it's explained in documentation here. in mind, write test looks this:
it('should run 1 second', function() { myservice.execute(1000); $timeout.flush(750); $rootscope.$digest(); expect(myservice.isrunning).tobe(true); });
Comments
Post a Comment