написание контрольного примера для функции в шутку - PullRequest
0 голосов
/ 01 марта 2019

Я пытаюсь написать тестовый блок для следующей функции:

export function exportTableToCSV(data, columns, filename) {
    const csv = encode(data, columns);
    downloadCsv(csv, filename);
}

А вот тестовый пример:

exportTableToCSV = jest.fn();
it('testing exportTableToCSV function', () => {
    const data = {
        "Linkname": "ATL-HOU",
        "Anode": "ATL:pos0/1",
        "Aloc": "ATL"
    }
    const columns = Object.keys(data);
    const filename = "data.csv";
    exportTableToCSV(data,columns,filename);
    expect(exportTableToCSV).toHaveBeenCalledWith(data,columns,filename);
}

это работает, но при попытке добавить:

expect(encode).toHaveBeenCalledWith(data,columns);

это дает мне ошибку, говоря, что это не было вызвано.Может кто-нибудь, пожалуйста, сообщите мне, как правильно написать контрольный пример для функции выше

1 Ответ

0 голосов
/ 01 марта 2019

Я считаю, что 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);
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...