Я считаю, что exportTableToCSV
, который называется, не является реальным exportTableToCSV
, это jest.fn()
.Реальное exportTableToCSV
будет вызвано encode()
, но вы не используете реальное здесь, поэтому encode()
не вызывается.
Одним из решений, которое я бы попробовал, было бы импортировать реальное exportTableToCSV()
и иметь encode()
как jest.fn()
.Затем, когда вы звоните exportTableToCSV()
, ожидайте, что был вызван encode()
, и вы докажете, что оба были вызваны.
Вот один из способов сделать это:
import { exportTableToCSV } from './foo'
it('testing exportTableToCSV function', () => {
const mockEncodeResult = 'i am a mock';
const encode = jest.fn((data, columns) => mockEncodeResult);
const downloadCsv = jest.fn((csv, filename) => {});
const testData = {
Linkname: 'ATL-HOU',
Anode: 'ATL:pos0/1',
Aloc: 'ATL',
};
const testColumns = Object.keys(testData);
const testFilename = 'data.csv';
exportTableToCSV(testData, testColumns, testFilename);
expect(encode).toHaveBeenCalledWith(testData, testColumns);
expect(downloadCsv).toHaveBeenCalledWith(mockEncodeResult, testFilename);
});
Обратите внимание: В приведенном выше примере я не издеваюсь exportTableToCSV
.jest.fn()
это издевательство.Этот модульный тест импортирует и проверяет действительную функцию exportTableToCSV
, но она проверяет encode()
и downloadCsv()
.Приветствия!
ОБНОВЛЕНИЕ ---
В своем комментарии вы заявляете, что видите ошибку около createObjectURL
, но ее нет в приведенном примере кода.Очевидно, что в модуле, который вы импортируете вместе с exportTableToCSV
, есть некоторый проблемный код.Правильный способ исправить это - смоделировать и очистить этот проблемный код, но поскольку я хочу предложить здесь автономное решение, вторым лучшим подходом является макетирование exportTableToCSV
.В этом случае вы не будете тестировать исходную функцию, а только макет.Удалите оператор import
и добавьте следующее в область действия контрольного примера после определения downloadCsv
:
const exportTableToCSV = jest.fn((data, columns, filename) => {
const csv = encode(data, columns);
downloadCsv(csv, filename);
});