Jest / Babel не может найти модули без префикса пути - PullRequest
0 голосов
/ 14 апреля 2019

Я пытаюсь следовать руководству по началу работы Jest , но в модулях ES6 и в корневой папке Babel.My есть два файла javascript sumfn.js и sum.test.js. Мой sum.test.js файл выглядит так:

import { sum } from 'sumfn';

test('adds 1 + 2 to equal 3', () => {
    expect(sum(1, 2)).toBe(3);
});

Однако кажется, что Jest не удается разрешить sumfn, хотя он явно находит файл sunfn.js.

  ● Test suite failed to run

    Cannot find module 'sumfn' from 'sum.test.js'

    However, Jest was able to find:
        './sumfn.js'

    You might want to include a file extension in your import, or update your 'moduleFileExtensions', which is currently ['js', 'json', 'jsx', 'ts', 'tsx', 'node'].

Если я изменю строку импорта на ./sumfn, это сработает. Тем не менее, из того, что я прочитал об импорте ES6, похоже, что он сможет найти файлы в том же каталоге. Возможно, это не поддерживается в Jest?

Ответы [ 2 ]

1 голос
/ 14 апреля 2019

Итак, одна из главных причин, по которой я был сбит с толку, заключается в том, что существует множество устаревших руководств по модулям ES6. На самом деле, многие из лучших результатов в Google, похоже, устарели. Я смотрел на такие руководства, как this , this и this , и все они сказали, что вы можете импортировать из имени модуля без указания пути, например

import { double } from 'mymodule';

Они называются "голыми" спецификаторами импорта , и в руководствах сказано, что по умолчанию будет выполняться поиск в текущем каталоге соответствующего модуля. Однако, похоже, что сейчас они не поддерживаются в браузерах .

Там, где это очень запутанно, это то, что они поддерживаются в BabelJS и Webpack, но это следует другому соглашению. Например, Webpack ищет пути , указанные в resolve.modules, которые по умолчанию включают в себя папку node_modules. Вот почему Create-React-App пример может использовать такие выражения, как

import React from 'react';

Похоже, что план на будущее состоит в том, чтобы позволить среде определить, как разрешить эти "голые" спецификаторы ( Source ). Кажется опасным, что каждая среда по-разному разрешает эти спецификаторы, что может затруднить создание кросс-совместимых модулей, но я думаю, что это текущий план на данный момент.

0 голосов
/ 14 апреля 2019

Вам нужно добавить ./, чтобы сообщить JavaScript Модуль, который вы ищете, находится по следующему пути к файлу относительно текущего файла. Поэтому вам нужно добавить ./ сказать Ищите sumfn.js в текущем каталоге .

...