шуточное тестирование с помощью es6 + jspm + systemjs + reactJS

Я пытаюсь понять, как сделать мои модульные тесты в моем приложении reactJS ES6. Мое приложение уже использует модульную систему es6, перенесенную с помощью jspm/babel в systemJs.

Я нашел babel-jest в качестве препроцессора, но даже с ним я не могу запустить свои тесты, потому что jest не может найти SystemJs. (в консоли отображается ошибка "Система не определена")

В браузере, как объясняется в документации jspm, SystemJ загружается глобально. Я предполагаю, что мне следует загружать SystemJ внутри моего препроцессора, но как я могу сделать systemJ доступными для загрузки дополнительных модулей в моих тестах?

заранее спасибо


person nemenos    schedule 05.10.2015    source источник
comment
PS. Я пытаюсь понять, как заставить его работать, поэтому, если я делаю что-то не так, пожалуйста, скажите мне, что!   -  person nemenos    schedule 05.10.2015
comment
Вы когда-нибудь находили решение?   -  person user5325596    schedule 31.12.2015
comment
Я больше не использую шутки. Перешел на простой жасмин. С плагином Jasmine, karma, jspm karma я могу запускать модульные тесты, у меня все еще есть некоторые проблемы, когда я хочу имитировать зависимости, но я думаю, что мне следует немного больше изучить systemjs, и я смогу это сделать, когда у меня будет время. ..   -  person nemenos    schedule 03.01.2016
comment
Вот это: github.com/shidhincr/react-jest-gulp-jspm-seed   -  person Shawn Erquhart    schedule 12.01.2016
comment
@ShawnErquhart, этот пример работает только потому, что require используется. К сожалению, на данный момент Jest не поддерживает насмешки над import в стиле ES6.   -  person Heinrich Filter    schedule 25.01.2016


Ответы (2)


К сожалению, на данный момент Jest не поддерживает модули SystemJS ES6.

См. следующие комментарии:

Таким образом, похоже, что шутка предполагает, что ваши модули разрешаются на основе алгоритма разрешения узлов.

К сожалению, это несовместимо с алгоритмом разрешения SystemJS.

Если бы в jest был способ установить собственный алгоритм распознавателя через API, мы могли бы подключить jspm к jest, но я не уверен, что это возможно в настоящее время.

-- комментарий Гая Бедфорда, создателя SystemJS, июнь 2015 г.


Маловероятно, что будет официальная поддержка [SystemJS], если это не вклад сообщества.

Комментарий @cpojer, соавтора Jest, январь 2016 г.


Также обратите внимание на следующую проблему: Выдается неверный URL-адрес при запросе systemjs в шутливых тестовых примерах

person Heinrich Filter    schedule 25.01.2016
comment
Да, комментарий cpojer, на который вы ссылались, на самом деле был частью быстрого обмена мнениями между ним и мной в моем стремлении заставить Jest и jspm работать. Я думаю, что мы увидим решение в течение следующих шести месяцев, когда внедрение jspm/systemjs будет набирать обороты. - person Shawn Erquhart; 25.01.2016
comment
А, теперь понятно, спасибо @ShawnErquhart. Будем надеяться, что вы правы! Шесть месяцев ты чувствуешь нутром или я пропустил какую-то информацию? - person Heinrich Filter; 26.01.2016
comment
Чистая кишка. Может быть, лучше сформулировать это так: я был бы удивлен, если бы к лету не было стандартной, хотя и базовой, установки jspm/Jest. - person Shawn Erquhart; 26.01.2016

по сути, чтобы заставить Jest хорошо играть с приложением, работающим на JSPM/SystemJS, вам нужно «научить» его всем сопоставлениям, которые он содержит в файле config.js (или, как бы вы ни называли System.config())

длинный ответ заключается в том, что вам нужно создать запись для каждой зависимости, которую вы установили с помощью JSPM, например:

//jest configuration 
moduleNameMapper: {     
   ...
   "^redux$": "[email protected]",
   ...
}

для каждого вашего псевдонима вам нужна хотя бы одна запись:

moduleNameMapper: {     
        ...
        "^common\\/(.*)": "<rootDir>/src/common/$1", //for a dir alias
       "^actions$": "<rootDir>/src/actions/index", //for a file alias
       ...
}

вам также необходимо иметь эти сопоставления в вашем nodeNameMapper:

moduleNameMapper: {     
    ...
         "^npm:(.*)": "<rootDir>/jspm_packages/npm/$1",
            "^github:(.*)": "<rootDir>/jspm_packages/github/$1",
    ...
}

и, наконец, вам нужна эта конфигурация moduleDirectories:

moduleDirectories: ["node_modules", "jspm_packages/npm", "jspm_packages/github"]

это не очень практично, потому что вы не хотите хранить две копии всех ваших реестров зависимостей и должны синхронизировать их при изменении...

так что краткий и лучший ответ, вы используете мой gulp-jest-jspm :)

даже если вы не используете gulp, вы можете использовать его метод getJestConfig() для создания конфигурации перед запуском Jest.

person poeticGeek    schedule 20.12.2016