Как я могу устранить следующую ошибку компиляции при запуске Jest для тестирования? - PullRequest
0 голосов
/ 11 июня 2019

Хотя я могу запустить проект npm, используя npm start без проблем с webpack или babel, после запуска npm test я обнаружил следующую ошибку, связанную с тестированием App.js с использованием App.test.js (где App.js импорт ApolloClient):

TypeError: Cannot assign to read only property '__esModule' of object '[object Object]'

| import ApolloClient from 'apollo-boost';
| ^

at node_modules/apollo-boost/lib/bundle.cjs.js:127:74
          at Array.forEach (<anonymous>)
      at Object.<anonymous> (node_modules/apollo-boost/lib/bundle.cjs.js:127:36)

По сути, я не понимаю, почему я получаю ошибку при запуске теста, а не при запуске проекта.

Я попытался добавить несколько плагинов babel как в .babelrc, так и в мой файл конфигурации webpack:

  • @ столпотворение / плагин-преобразование-объект-правопреемник
  • @ Babel / плагин-преобразующие-модули-CommonJS
  • столпотворение-плагин-преобразующий-es2015-модули-CommonJS

Однако мне не удалось решить проблему. Я думал, что это связано с тем, что файл, который не может быть скомпилирован, изначально был CommonJS.

Мне удалось найти здесь нечто относительно похожее, https://github.com/ReactTraining/react-router/pull/6758,, но я не нашел решения.

Есть ли что-то, что я упускаю, конкретно относящееся к выполнению тестов? Я должен также упомянуть, что я пробовал фреймворки, отличные от Jest, и столкнулся с той же проблемой.

EDIT:

Я удалил все из App.test.js, кроме импорта, чтобы изолировать проблему, поэтому она просто содержит следующее:

import React from 'react';
import { shallow } from 'enzyme/build';
import App from './App';

UPDATE:

Мне удалось устранить начальную ошибку, обновив apollo-boost с версии 0.3.1 до 0.4.2. Тем не менее, у меня теперь есть другая ошибка, которая также расстраивает. Я использую Babel 7 и добавил плагин @babel/plugin-syntax-dynamic-import как для моих .babelrc, так и для моих webpack.config.js файлов. Несмотря на это, я получаю следующую ошибку, связанную с использованием динамического импорта в App.js при запуске Jest для проверки App.test.js:

SyntaxError: Support for the experimental syntax 'dynamicImport' isn't currently enabled

Add @babel/plugin-syntax-dynamic-import (https://git.io/vb4Sv) to the 'plugins' section of your Babel config to enable parsing.

Я не уверен, есть ли ошибка синтаксического анализа или что-то еще, но я пробовал множество вещей, которые не работали. Самое близкое обсуждение, которое я мог найти относительно этой проблемы, это https://github.com/facebook/jest/issues/5920,, однако, предложенные решения не работают для меня.

UPDATE:

Я пытаюсь избежать дублирования опций babel, так как сейчас они оба в .babelrc и в babel-loader options в webpack.config.js. Из того, что я нашел в Интернете ( Какая разница при настройке webpack babel-loader и его настройке в package.json? ), способ заставить webpack использовать настройки в .babelrc - не указывать options. Однако это приводит к той же ошибке, описанной выше, которая появляется только в этот раз при запуске npm start. Я добавлю, что проект, который был изначально создан с использованием create-react-app, однако, чтобы поддерживать несколько страниц, мне нужно было настроить конфигурацию webpack и таким образом извлечь ее. Я не уверен, почему это так запутанно.

Ответы [ 2 ]

0 голосов
/ 12 июня 2019

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

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

0 голосов
/ 12 июня 2019

это, вероятно, проблема конфигурации babel, я уверен, что шутку нужно скомпилировать для работы с create-реагировать-app ... Вы указали установочный файл в package.json:

"jest": {
    "setupFiles": [
        "/setupTests.js"
    ]
}

и в setupTests.js:

import { configure } from 'enzyme';
import Adapter from 'enzyme-adapter-react-16';

configure({ adapter: new Adapter() });
...