Подшучивать над "ora" с Jest, чтобы увидеть, если это называется - PullRequest
0 голосов
/ 04 апреля 2020

Я использую jest и пытаюсь смоделировать пакет ora spinner.start, чтобы увидеть, был ли он вызван. Я пробовал следующее, как я думаю, что они сделали это в другом посте здесь

Мой код (лала. js):

import ora from 'ora';
const spinner = ora({ indent: 2 });


export const lala = () => {
  spinner.start('dfsdfsdf');
  return 'hey';
};


export default lala();

тестовый файл:

import { lala } from './lala';
import ora from 'ora';

jest.mock('ora', () => () => {
  const start = jest.fn();
  const result = { start };
  return result;
});

describe('lala', () => {
  it.only('calls start', () => {
    lala();
    const spinner = ora();
    expect(spinner.start).toHaveBeenCalled();
  });
});

Ошибка, которую я получаю от Jest, заключается в том, что он не был вызван как show в следующем блоке кода:

expect(jest.fn()).toHaveBeenCalled()

Expected number of calls: >= 1
Received number of calls:    0

Я пробовал так много вещей и импортировал / дразнить это многими способами, но не могу заставить его работать. В конце концов, я хочу сделать toHaveBeenCalledWith('dfsdfsdf'), но пока не могу даже правильно высмеять это. Любая помощь будет оценена. Я использую следующие версии Jest и Ora:

"jest": "24.8.0", "ora": "3.2.0",

Заранее спасибо.

1 Ответ

0 голосов
/ 04 апреля 2020

Мне удалось получить рабочее решение. Я решил эту проблему, создав вспомогательную функцию, которая инициализирует объект ora и используется в lala.js.

import ora from 'ora';
export const spinner = ora({ indent: 2 });

, так что я могу импортировать объект в свой тестовый файл и шпионить за start, а затем использовать шпион в моем ожидании вот так:

import { spinner } from './utils/ora-helper';

export const lala = () => {
  spinner.start('dfsdfsdf');
  return 'hey';
};

export default lala();
import { lala } from './lala';
import { spinner } from './utils/ora-helper';

describe('lala', () => {
  it.only('calls start', () => {
    const spinnerSpy = jest.spyOn(spinner, 'start');
    lala();

    expect(spinnerSpy).toHaveBeenCalled(); // works like a charm
  });
});
...