使用 Jest 进行测试时,classnames_1.default 不是函数
Posted
技术标签:
【中文标题】使用 Jest 进行测试时,classnames_1.default 不是函数【英文标题】:classnames_1.default is not a function when testing with Jest 【发布时间】:2017-07-27 03:43:30 【问题描述】:当使用类名 (https://www.npmjs.com/package/classnames) 库时,我在 Jest 上运行测试用例时遇到问题:
抛出错误:classnames_1.default 不是函数
它正在网站本身上使用 webpack.. 所以我不想更改导入。
我可以选择模拟类名以进行测试以提供类似的行为。有没有其他方法可以解决这个问题?
有人遇到过这个问题吗?
这是我在 package.json 中的笑话配置:
"jest":
"globals":
"API_HOST": "",
"DEV": false
,
"transform":
".(ts|tsx)": "<rootDir>/node_modules/XXX-framework/jestTypeScriptPreProcessor.js"
,
"testRegex": "(/tests/.*|\.(test|spec))\.(js|jsx|ts|tsx)$",
"transformIgnorePatterns": [],
"moduleFileExtensions": [
"ts",
"tsx",
"js",
"json"
],
"automock": false,
"clearMocks": true,
"resetMocks": true,
"coverageThreshold":
"global":
"branches": 50,
"functions": 50,
"lines": 50,
"statements": 50
,
"modulePaths": [
"<rootDir>/src",
"<rootDir>/node_modules/XXX-framework/src"
],
"unmockedModulePathPatterns": [
"<rootDir>/node_modules/react/",
"<rootDir>/node_modules/react-dom/",
"<rootDir>/node_modules/react-addons-test-utils/",
"<rootDir>/node_modules/enzyme/",
"<rootDir>/node_modules/XXX-framework/"
]
谢谢
【问题讨论】:
你有没有设法解决这个问题? 【参考方案1】:您可能正在使用css-loader
,因此它适用于 Webpack。问题是 Jest 不会使用 css-loader
加载您的 CSS 文件,您有责任告诉 Jest 如何加载 CSS 文件。一种方法是使用identity-obj-proxy。
做npm i -D identity-obj-proxy
(如果你喜欢也可以使用yarn安装)
并将此配置添加到您的 Jest 配置文件中
"moduleNameMapper":
"^.+\\.css$": "identity-obj-proxy"
您可以在this document找到更多详细信息。
【讨论】:
我不想在测试中看到 css 样式。我只想看看元素在加载时是否有特定的类。 classnames 是一个简单的 js 库,用于根据参数返回单个类名字符串。它是 js 格式,因此甚至不需要从 typescript 文件转换为 javascript 文件。 您介意在此处粘贴有关您如何使用classnames
的代码吗?以上是关于使用 Jest 进行测试时,classnames_1.default 不是函数的主要内容,如果未能解决你的问题,请参考以下文章
如何使用不同的jest.config.js进行单元和组件测试?