无法在模块外使用导入语句 - Vuex 测试类星体
Posted
技术标签:
【中文标题】无法在模块外使用导入语句 - Vuex 测试类星体【英文标题】:Cannot use import statement outside a module - Vuex testing quasar 【发布时间】:2020-09-13 06:22:08 【问题描述】:你好吗?
我在使用 Quasar 测试 Vuex 时遇到问题。
测试组件工作正常,但是当我开始测试我的商店时,我得到了它。
规格文件:
/test/jest/__tests__/store/auth/mutations.spec.js
import store from 'src/store';
import mutations from 'src/store/auth';
import mutations from 'src/store/auth/mutations';
我尝试以所有这些方式导入商店的东西,我得到了这个错误:
("Object.<anonymous>":function(module,exports,require,__dirname,__filename,global,jest)import store from 'quasar/wrappers';
SyntaxError: Cannot use import statement outside a module
如何在我的规范文件中导入我的商店?
【问题讨论】:
【参考方案1】:import store from 'src/store';
import mutations from 'src/store/auth';
import mutations from 'src/store/auth/mutations';
只需使用要求
const store = require('src/store');
const mutations = require('src/store/auth)';
const mutations = require('src/store/auth/mutations');
你需要 type=module 在 package.json 中使用 import
【讨论】:
【参考方案2】:您的问题是纯 javascript 不支持 import
语句,因此 Node.js 也不支持。 import
是一个名为 ES Modules
的添加。由于 Jest 在 Node 中运行您的测试,您将得到 SyntaxError
,因为 import store from 'quasar/wrappers'
是无效的 JS 语法。
解决方案是您需要告诉 Jest 在尝试在 Node 中执行之前使用 Babel(或类似工具)来转换您的测试文件。
这需要在你的jest.config.js
中进行一些配置,并且你还需要安装babel-jest
、babel
和相关的包并创建一个.babelrc
或babel.config.js
来告诉 Babel 如何处理你的测试准确的文件。
实际正确的配置可能取决于许多因素,但作为起点,请参考以下几点:
https://jestjs.io/docs/en/getting-started#using-babel https://jestjs.io/docs/en/configuration#transform-objectstring-pathtotransformer--pathtotransformer-object https://github.com/facebook/jest/tree/master/packages/babel-jest#setup我还建议考虑使用 Quasar CLI,它为您提供了一种为您的 Quasar 项目自动设置 Jest 的便捷方法,包括一个简单的示例测试,您可以将其用作起始参考:https://testing.quasar.dev/
【讨论】:
以上是关于无法在模块外使用导入语句 - Vuex 测试类星体的主要内容,如果未能解决你的问题,请参考以下文章
Mocha + TypeScript:不能在模块外使用导入语句
导入 ReactJS 时出现“未捕获的语法错误:无法在模块外使用 import 语句”
Typescript 和 Node.js 错误“SyntaxError:无法在模块外使用导入语句”