Реактивный ферментный тест

В моем компоненте реакции есть элемент ввода (загрузки) файла. Когда пользователь загружает файл xlsx, вызывается метод компонента, который считывает файл xlsx, преобразует его в JSON и помещает в таблицу избыточности. Это метод «convertFileDataToJSON», который принимает объект File и выполняет описанное выше.

Мне нужно протестировать этот метод.

Я не могу использовать «новый файл («файл://путь/к/файлу»)». Я получаю следующую ошибку

TypeError: FileConstructor не является конструктором (оценка «нового файла»)

Я использую «новый BLOB-объект» для создания объекта BLOB-объекта и отправки его методу экземпляра в метод экземпляра.

var myBlob = new Blob(["application_id,Statement " +
"Received Date,Statement Requested Date,"+
"1,10/10/70,10/10/70,10/10/70"+
"2,12/20/71,12/20/71,12/20/71"], {type : "text/plain"});
const json = component.instance().convertFileDataToJSON(myBlob);

Будем признательны за любую помощь в тестировании этого метода.


person Soundararajan    schedule 24.08.2018    source источник
comment
Не могли бы вы указать среду, в которой вы тестируете? Node.js? Настольный или мобильный браузер?   -  person Pier Paolo Ramon    schedule 24.08.2018


Ответы (1)


Хорошо, не ответ, но позвольте мне предложить вам изменить способ тестирования собственного кода.

Императивное тестирование метода компонента React — это более или менее анти-шаблон — плохая вещь. Причина проста: компонент определяет свой общедоступный API как props, и это поверхность, с которой вы должны тестировать.

Примечание. Хотя методы экземпляра компонента фактически доступны родительским компонентам, имеющим на них ссылку, это считается плохой практикой.

Более хорошим подходом было бы иметь автономную функцию, которую можно протестировать изолированно:

export function convertFileDataToJSON(file) {
  return // ...
}

и вы бы проверили это (в Jest) как:

import { convertFileDataToJSON } from '../utils/somewhere';

const blob = new Blob(
  [
    "application_id,Statement " +
    "Received Date,Statement Requested Date,"+
    "1,10/10/70,10/10/70,10/10/70"+
    "2,12/20/71,12/20/71,12/20/71"
  ],
  {type : "text/plain"}
);

describe('XLSX to JSON', () => {
  it('Works on simple CSV files', () => {
    const data = convertFileDataToJSON(blob);

    expect(data).toMatch( ...something );
  });
})
person Pier Paolo Ramon    schedule 24.08.2018
comment
Большое спасибо Пьер Паоло Рамон. Я сделал это отдельной функцией util. Я уверен, что он вызывается. Я возвращаю обещание из этой функции. Теперь мне нужно передать файловый объект этой функции преобразования, чтобы преобразовать его. Блоб, похоже, не работает. новый File() выдает ошибку. ``` Я как бы застрял здесь. И как мне console.log() вернуть данные из этой функции? ``` Спасибо - person Soundararajan; 25.08.2018
comment
Как вы проводите свои тесты? Они запускаются в Node.js или в браузере? - person Pier Paolo Ramon; 27.08.2018
comment
Я новичок в тестировании. Я запускаю npm run test из CL. Это фермент. Мы используем только поверхностный рендеринг. Никогда не используйте mount. Функции тестируются с помощью jasmine.createSpy(). Я считаю, что он использует PhantomJS 2.1.1 (Mac OS X 0.0.0). Пожалуйста, дайте мне знать, если этой информации недостаточно. - person Soundararajan; 28.08.2018
comment
Вы обязательно должны обновить эту информацию. Вы смотрели на эти вопросы и ответы? stackoverflow.com/questions/38656569/ - person Pier Paolo Ramon; 28.08.2018
comment
У меня есть тест, который проверяет, вызывается ли какой-либо другой метод с новым объектом blob, однако я получаю справочную ошибку для Blob, поскольку это вещь браузера. Как вы обошли это в своих тестах Jest? - person Jeremy; 27.11.2019