![](/img/trans.png)
[英]How to resolve the error TypeError: x is not a function for testing of the following function in Jest?
[英]How can I resolve the following compilation error when running Jest for testing?
雖然我能夠使用npm start
npm項目而沒有任何webpack或babel問題,但是一旦我運行npm test
,我發現以下錯誤與使用App.test.js
測試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)
基本上,我很困惑為什么我在運行測試時遇到錯誤而不是在啟動項目時出錯。
我已經嘗試在.babelrc
和我的webpack配置文件中添加了一些babel插件:
但是,我無法解決這個問題。 我的想法是,這與無法編譯的文件最初是CommonJS有關。
我只能在這里找到一些相對類似的東西, https://github.com/ReactTraining/react-router/pull/6758 ,但我找不到解決方案。
是否有一些我缺少與運行測試有關的東西? 我還應該提到我已經嘗試過除了Jest之外的框架並遇到了同樣的問題。
編輯:
我從App.test.js
刪除了除導入之外的所有內容以隔離問題,因此它只包含以下內容:
import React from 'react';
import { shallow } from 'enzyme/build';
import App from './App';
更新:
通過將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
時,在App.js
使用動態導入時App.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 ,但是,建議的解決方案對我不起作用。
更新:
我想要有一點是避免重復babel
選項,現在他們都在.babelrc
並在babel-loader
options
中webpack.config.js
。 從我在網上找到的( 配置webpack babel-loader與在package.json中配置它的區別是什么? ),使webpack
使用webpack
的設置的.babelrc
是不指定options
。 但是,這樣做會導致上述相同的錯誤,僅在運行npm start
。 我將添加最初使用create-react-app
的項目,但是,為了支持多個頁面,我需要自定義webpack
的配置並從中彈出。 我不確定為什么這么復雜。
它可能是一個babel配置問題,我很確定jest需要編譯才能與create-react-app一起使用...你是否在package.json中指定了一個安裝文件:
"jest": {
"setupFiles": [
"/setupTests.js"
]
}
並在setupTests.js中:
import { configure } from 'enzyme';
import Adapter from 'enzyme-adapter-react-16';
configure({ adapter: new Adapter() });
事實證明,項目的src
目錄中的一個組件有自己的本地package.json
文件,即使它沒有被使用,也沒有作為頂級package.json
的本地依賴項安裝(而是使用相對網址)。 出於某種原因,在啟動和測試項目時,此文件的存在改變了webpack和其他工具的行為,使得沒有頂級配置用於具有單獨package.json
文件的目錄中的文件。 一旦我從components子目錄中刪除了這些本地package.json
文件,就解決了所有先前的問題。 此問題的一個標志是編譯錯誤未顯示未嵌套在備用package.json
文件下的JavaScript文件。
希望這對遇到類似錯誤的任何人都有用,因為我認為不能直接從編譯器消息中確定原因。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.