2017-08-23 1 views
6

Fondamentalement, je dois tester cette ci-dessous fonction, où je suis la lecture du fichier texteangulaire Karma Jasmine - fonction de test

$window.resolveLocalFileSystemURL(cordova.file.dataDirectory, function (dir) { 
    var path = 'somefile.txt';      
    dir.getFile(path, { create: true }, function (file) { 
     file.file(function (file) { 
      var reader = new FileReader(); 
      reader.onloadend = function() {        
       resolve(this.result); 
      } 
      reader.readAsText(file); 
     }); 
    }, error); 
}, error); 

je suis coincé par écrit les cas de tests unitaires pour la lecture du fichier

describe('get data from file', function() {    

    it('should read the files from the data', function() { 
     var syncFile = 'somefile.txt'; 

     expect().toBe(); 
    }); 
}); 

Comment écrire un test unitaire pour filereader pour lire le fichier? PS: je suis novice en tests unitaires utilisant le karma

Répondre

7

Vous ne devriez pas utiliser FileReader directement. Modifier cette ligne à

var reader = new $window.FileReader(); 

Dans votre test se moquer de la fenêtre $ et retourner un objet FileReader personnalisé. Ensuite, faites les tests sur cela. Quelque chose comme ci-dessous.

describe('get data from file', function() { 

    var $window, fileReader; 

    beforeEach(function() { 

     inject(function (_$window_) { 
      $window = _$window_; 
     }); 

     fileReader = function() { 
      return {}; 
     }; 

     spyOn($window, "FileReader").and.returnValue(fileReader); 
    }); 

    it('should read the files from the data', function() { 
     var syncFile = 'somefile.txt'; 

     expect($window.FileReader).toHaveBeenCalled(); 
    }); 
}); 
+0

pouvez-vous s'il vous plaît expliquer comment cela est exécuté? – Matarishvan

+0

@Matarishvan Quelle partie vous ne comprenez pas? Dans l'ensemble, il crée un espion pour la méthode FileReader dans l'objet window. Ensuite, vous pouvez utiliser cet espion pour injecter votre propre comportement et suivre et tester les appels faits à cette méthode. – Shahzad

+0

Donc, fondamentalement, je dois transmettre ma fonction exacte dans ma fonction attendre. Ne pas s'attendre à être et comment l'utiliser? – Matarishvan