无法在模块外使用导入语句 - 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-jestbabel 和相关的包并创建一个.babelrcbabel.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 测试类星体的主要内容,如果未能解决你的问题,请参考以下文章

导入“uuid”时无法在模块外使用导入语句 [重复]

Mocha + TypeScript:不能在模块外使用导入语句

导入 ReactJS 时出现“未捕获的语法错误:无法在模块外使用 import 语句”

Typescript 和 Node.js 错误“SyntaxError:无法在模块外使用导入语句”

Node12/next9 SyntaxError:无法在模块外使用导入语句

导入 ECMAScript 6 时出现“未捕获的语法错误:无法在模块外使用 import 语句”