Как использовать readAsText () в тесте Жасмин и предупредить результат? - PullRequest
0 голосов
/ 02 июля 2018

Я пытаюсь протестировать функцию, которая возвращает Blob CSV, у него есть тип, имя и т. Д. И предупреждение, которое возвращает это:

Object{size: 9, type: 'text/csv;charset=utf-8;', name: 'Test'}

и это тоже instanceOf Blob.

Я пытался сделать эту консультацию этот вопрос ...

var fr = new FileReader();
fr.onload = function(e) {
  return e.target.result;
};
alert(fr.readAsText(blob));
alert(blob instanceof Blob);

Хотя не повезло, первый сигнал тревоги просто возвращает undefined.

ALERT: undefined
ALERT: true 

Любая помощь с этим? Как я могу преобразовать содержимое блоба CSV в строку, которую я могу затем прочитать и проверить результат содержимого в CSV?

Ответы [ 2 ]

0 голосов
/ 07 июля 2018

На самом деле проблема заключалась в том, что в тесте было что-то еще, издевающееся над созданием CSV / BLOB-объектов, в частности ngMocks, поэтому BLOB-объект фактически не создавался.

Если у вас похожий случай, когда вы делаете это в тесте Жасмин, то может быть и ваша ситуация. Чтобы обойти это, я высмеял функцию, которая создает / организует содержимое большого двоичного объекта в тесте, а затем просто записал это локально, чтобы я мог проверить его позже ... вместо того, чтобы пытаться получить доступ к самому большому двоичному объекту.

this.CSV.stringify.and.callFake(function(csvFeaturesInStringify, csvOptionsInStringify) {
    this.csvFeatures = csvFeaturesInStringify;
    this.csvOptions= csvOptionsInStringify;
    return {
      then: function(successCallback) {
        successCallback("geometry,LAT,LONG,name,marker-color");
      }
    };
0 голосов
/ 03 июля 2018

FileReader - это асинхронная библиотека. Когда вы назначаете функцию для fr.onload, FileReader будет вызывать эту функцию с данными при загрузке файла. Это означает, что ваши данные доступны только внутри этой функции, и вы не можете получить их во внешнюю область. Вы хотите сделать что-то вроде этого:

var fr = new FileReader(); // Create FileReader instance

// Assign a function to be called when FileReader reads a file
fr.onload = function(e) {

  // Your data is available in this scope only. Returning it does nothing.
  alert(e.target.result);
  alert(blob instanceof Blob);
};

fr.readAsText(blob); // Tell our instance of FileReader to read `blob`
...