Trigger drive scans after slight delays

This allows unit tests to easily capture the first run, as otherwise
happens too fast.
This commit is contained in:
Juan Cruz Viotti 2016-01-18 13:23:50 -04:00
parent b7da4dfeda
commit 491a0ae9c9
3 changed files with 29 additions and 8 deletions

View File

@ -131,7 +131,7 @@ if (window.mocha) {
var driveScanner = angular.module('ResinEtcher.drive-scanner', []);
driveScanner.service('DriveScannerRefreshService', function($interval) {
driveScanner.service('DriveScannerRefreshService', function($interval, $timeout) {
'use strict';
var interval = null;
@ -150,8 +150,15 @@ driveScanner.service('DriveScannerRefreshService', function($interval) {
* }, 2000);
*/
this.every = function(fn, ms) {
// Call fn after in the next process tick
// to be able to capture the first run
// in unit tests.
$timeout(function() {
fn();
interval = $interval(fn, ms);
});
};
/**

View File

@ -34,7 +34,7 @@ if (window.mocha) {
var driveScanner = angular.module('ResinEtcher.drive-scanner', []);
driveScanner.service('DriveScannerRefreshService', function($interval) {
driveScanner.service('DriveScannerRefreshService', function($interval, $timeout) {
'use strict';
var interval = null;
@ -53,8 +53,15 @@ driveScanner.service('DriveScannerRefreshService', function($interval) {
* }, 2000);
*/
this.every = function(fn, ms) {
// Call fn after in the next process tick
// to be able to capture the first run
// in unit tests.
$timeout(function() {
fn();
interval = $interval(fn, ms);
});
};
/**

View File

@ -12,9 +12,11 @@ describe('Browser: DriveScanner', function() {
var DriveScannerRefreshService;
var $interval;
var $timeout;
beforeEach(angular.mock.inject(function(_$interval_, _DriveScannerRefreshService_) {
beforeEach(angular.mock.inject(function(_$interval_, _$timeout_, _DriveScannerRefreshService_) {
$interval = _$interval_;
$timeout = _$timeout_;
DriveScannerRefreshService = _DriveScannerRefreshService_;
}));
@ -23,6 +25,7 @@ describe('Browser: DriveScanner', function() {
it('should call the function right away', function() {
var spy = m.sinon.spy();
DriveScannerRefreshService.every(spy, 1000);
$timeout.flush();
DriveScannerRefreshService.stop();
m.chai.expect(spy).to.have.been.calledOnce;
});
@ -30,6 +33,7 @@ describe('Browser: DriveScanner', function() {
it('should call the function in an interval', function() {
var spy = m.sinon.spy();
DriveScannerRefreshService.every(spy, 100);
$timeout.flush();
// 400ms = 100ms / 4 + 1 (the initial call)
$interval.flush(400);
@ -45,11 +49,13 @@ describe('Browser: DriveScanner', function() {
describe('DriveScannerService', function() {
var $interval;
var $timeout;
var $q;
var DriveScannerService;
beforeEach(angular.mock.inject(function(_$interval_, _$q_, _DriveScannerService_) {
beforeEach(angular.mock.inject(function(_$interval_, _$timeout_, _$q_, _DriveScannerService_) {
$interval = _$interval_;
$timeout = _$timeout_;
$q = _$q_;
DriveScannerService = _DriveScannerService_;
}));
@ -169,6 +175,7 @@ describe('Browser: DriveScanner', function() {
it('should set the drives to the scanned ones', function() {
DriveScannerService.start(200);
$timeout.flush();
$interval.flush(400);
m.chai.expect(DriveScannerService.drives).to.deep.equal(this.drives);
DriveScannerService.stop();