Как правильно настроить jest.mock () для работы с псевдонимом веб-пакета? - PullRequest
0 голосов
/ 16 февраля 2019

Я пытаюсь смоделировать конструктор класса ES6, используя jest v23.6.0 и babel 6.22.1.Разумеется, реальный код более сложен, чем приведенный ниже, но я сократил его до этого и все еще имею проблему.

У меня есть следующий класс:

StageComponent.js

export default class StageComponent {
  constructor () {}
}

и следующий тестовый код:

import StageComponent from './StageComponent';
jest.mock('./StageComponent');

describe('StageComponent', () => {
  it('should track constructor', () => {
    let c = new StageComponent();

    expect(StageComponent).toHaveBeenCalled();
  });
});

Когда я проверяю это, я получаю

 jest.fn() value must be a mock function or spy.
    Received:
      function: [Function StageComponent]

       6 |     let c = new StageComponent();
       7 |
    >  8 |     expect(StageComponent).toHaveBeenCalled();
         |                            ^
       9 |   });
      10 | });
      11 |

Независимо от того, что я пытаюсь, это похоже на макет() вызов ничего не делает.В противном случае Jest, кажется, работает нормально (например, я успешно заменил отдельные свойства на jest.fn ()), поэтому я не думаю, что это моя установка.Я что-то упускаю?Это, кажется, прямо из документов ...

РЕДАКТИРОВАТЬ: Фактический код для теста был:

import StageComponent from '@/StageComponent';
jest.mock('@/StageComponent');

...

и я изменил его для простоты, когдаЯ отправил эту скрытую проблему, которая была псевдонимом веб-пакета @ в пути.Он работает нормально, если я дам ему полный путь (включая .js в конце) как в import, так и в mock().Итак, теперь вопрос в том, почему псевдоним не работает.(Также обратите внимание, что использование псевдонима в import, а не в mock() дает тот же результат, если это подсказка).

В конфигурации веб-пакета у меня есть alias:

'@': resolve('src')

В jest config у меня есть это moduleNameMapper:

'^@/(.*)$': '<rootDir>/src/$1'

А на самом деле, если я изменяю moduleNameMapper, это выдает ошибки о том, что файл не найден, поэтому я подумаю, если это не таквообще не работает, было бы выбрасывать похожие ошибки, а не применять mock()

1 Ответ

0 голосов
/ 16 февраля 2019

При работе в Windows заглавные буквы должны совпадать для всех операторов import в коде (для всех файлов) и операторов mock().Очевидно, вы получите сообщение об ошибке на других платформах, если это не так, но в Windows он успешно загрузит файл без ошибок, но import и mock не будут выстроены в линию, и, таким образом, поддельный конструктор нене звонят.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...