【问题标题】:SyntaxError: Cannot use import statement outside a module when following vue-test-utils official tutorialSyntaxError: Cannot use import statement when following vue-test-utils 官方教程
【发布时间】:2021-10-08 16:15:37
【问题描述】:

我无法让 vue 测试与 vue-test-utils 和 jest 一起使用。我用 vue cli 创建了一个干净的新项目,并添加了如下的玩笑,也许有人可以跟着告诉我我做错了什么。 (我正在关注这个安装指南:https://vue-test-utils.vuejs.org/installation/#semantic-versioning

  1. vue create jest-test

    1.1。 npm install

  2. npm install --save-dev jest @vue/test-utils vue-jest

  3. 在 package.json 中添加了 jest 配置:

    {
      "jest": {
        "moduleFileExtensions": [
          "js",
          "json",
          "vue"
        ],
        "transform": {
          ".*\\.(vue)$": "vue-jest"
        }
      }
    }
    
  4. npm install --save-dev babel-jest @babel/core @babel/preset-env babel-core@^7.0.0-bridge.0

  5. 将笑话配置调整为:

    {
      "jest": {
        "transform": {
          // process `*.js` files with `babel-jest`
          ".*\\.(js)$": "babel-jest" //<-- changed this
        }
      }
    }
    
    1. 将 babel 配置调整为:
    module.exports = {
        presets: [
            '@vue/cli-plugin-babel/preset',
            '@babel/preset-env' //<-- added this
        ]
    };
    
  6. 在项目根目录下的tests目录中创建example.test.js (jest-test/tests)

  7. 在此文件中添加了以下内容:

    import { mount } from '@vue/test-utils'
    import HelloWorld from "@/components/HelloWorld";
    
    
    test('displays message', () => {
        const wrapper = mount(HelloWorld)
    
        expect(wrapper.text()).toContain('Welcome to Your Vue.js App')
    })
    
  8. 在 package.json 脚本中添加了以下内容: "jest": "jest"

  9. npm run jest

  10. 得到以下错误:

    C:\Users\xxx\jest-test\tests\example.test.js:1
        import { mount } from '@vue/test-utils'
        ^^^^^^
    
        SyntaxError: Cannot use import statement outside a module
    

Mocha 也会发生同样的情况,或者如果我在现有项目中尝试使用它。这是一个错误吗?无论我做什么,我都无法让它工作。

编辑:如果我使用 Vue CLI 进行操作,它可以工作 https://vue-test-utils.vuejs.org/installation/#installation-with-vue-cli-recommended

【问题讨论】:

    标签: javascript vue.js jestjs mocha.js vue-test-utils


    【解决方案1】:

    您需要同时转换 *.vue 文件和 *.js 文件。 我尝试了您的设置,并且可以重现该问题。但是将jest.config.js 更改为以下内容后,测试将运行良好:

    module.exports = {
      "moduleFileExtensions": [
        "js",
        "json",
        "vue"
      ],
      transform: {
        '.*\\.js$':'babel-jest',
        ".*\\.(vue)$": "vue-jest"
      },
      moduleNameMapper: {
        "@/(.*)": "<rootDir>/src/$1",
      },
      testEnvironment: 'jsdom'
    }
    

    【讨论】:

    • 这解决了!谢谢!那么您是否同意我的观点,即当您按照步骤 1to1 操作时,官方文档不起作用?因为这部分:".*\\.js$":"babel-jest" 不在文档中,即使这不是 Vue.js 特定的,没有它他们的教程也无法工作。
    • 我的测试项目已修复。在我的“真实”项目中,我收到以下错误:ReferenceError: axios is not defined。我认为可以通过将"axios" 添加到transformIgnorePatterns 数组来解决此问题。这确实有效,但导致了另一个错误:ReferenceError: regeneratorRuntime is not defined。如果我将它添加到数组中,这个问题不会得到解决。即使我将数组设置为空:transformIgnorePatterns: [],(因此考虑所有包)错误仍然存​​在。你能帮我解决这个问题吗?
    • 我不确定官方文档。我认为这很有效,因为我使用“jsdom”作为测试环境。对于 axios,我总是模拟请求。您可以使用github.com/knee-cola/jest-mock-axios 之类的解决方案。
    猜你喜欢
    • 2021-07-31
    • 1970-01-01
    • 1970-01-01
    • 2022-11-26
    • 2022-11-23
    • 1970-01-01
    • 2022-11-21
    • 2021-11-21
    相关资源
    最近更新 更多