当前位置: 首页 > 知识库问答 >
问题:

笑话:如何模拟vuex中使用的vue路由器

东门涵育
2023-03-14

我尝试在vuex的操作中使用vue路由器,这在本地主机上运行良好。

然而,当我试图通过从存储文件导入操作来准备存储(模拟)时,我得到了错误。

你能帮我解决这个问题吗?

版本

vue-test-utils: 1.0.0-beta.16
yarn: 1.5.1
vuejs: 2.5.13
vue-jest: 1.4.0

错误msg

 FAIL  test/components/main.test.js
  ● Test suite failed to run

    /Users/gulliver/Desktop/test/vue-test-utils-jest-example/node_modules/vue/dist/vue.esm.js:10809
    export default Vue$3;
    ^^^^^^

    SyntaxError: Unexpected token export

      at ScriptTransformer._transformAndBuildScript (node_modules/jest-runtime/build/script_transformer.js:305:17)
      at Object.<anonymous> (src/router/main.js:1:203)
      at Object.<anonymous> (src/store/main.js:3:13)

Test Suites: 1 failed, 1 total
Tests:       0 total
Snapshots:   0 total
Time:        2.354s
Ran all test suites matching /test\/components\/main.test.js/i.
error An unexpected error occurred: "Command failed.
Exit code: 1

app/src/main。js

import Vue from "vue/dist/vue.esm";
import App from './App.vue'
import store from './store/main.js';
import router from './router/main.js';

new Vue({
  el: '#app',
  render: h => h(App),
  store,
  router,
})

app/src/store/main。js

import Vue from "vue";
import Vuex from 'vuex';
import router from '../router/main.js'

Vue.use(Vuex)

export const actions = {
  locationTo(context, url){
    router.push(url)  
  }
}
export default new Vuex.Store({
  actions,
})

应用程序/src/路由器/main.js

import Vue from "vue/dist/vue.esm";
import VueRouter from 'vue-router';
import root from '../components/root.vue';
import hoge from '../components/hoge.vue';

Vue.use(VueRouter)

export const routes = [
  { path: '/', component: root},
  { path: '/hoge', component: hoge},
];

export default new VueRouter({
  mode: 'history',
  routes
})

应用程序/测试/组件/主。测验js

import Vue from "vue";
import Vuex from "vuex";
import { shallowMount, createLocalVue } from "@vue/test-utils";

import { actions } from "@/store/main"; //NOTE: this causes error

import _ from "lodash";
const localVue = createLocalVue();

import root from '@/components/root.vue'
import hoge from '@/components/hoge.vue'

describe('increment.vue', () => {
  let propsData;
  let store;
  let wrapper;

  beforeEach(() => {
    propsData = _.cloneDeep(personObject)

    store = new Vuex.Store(_.cloneDeep({
      actions,
    }))

    const $route = {
      path: '/hoge', components: hoge
    }

    wrapper = shallowMount(root, {
      localVue,
      propsData,
      store,
      use: ['Vuex'],
      stubs: ['router-view'],
      mocks: {
        $route
      }
    })

  });

  it('test:router in store', () => {
    // check if URL changed after action executed
  });

})

组件

// App.vue
<template>
  <div id="app">
    <router-view></router-view>
  </div>
</template>

// root.vue
<template>
  <div>
    <p>root component</p>
  </div>
</template>

<script>
export default {
  mounted () {
    this.$store.dispatch('locationTo', '/hoge')
  },
}
</script>

// hoge.vue
<template>
  <div>
    <p>hoge template</p>
  </div>
</template>

共有1个答案

景宏富
2023-03-14

此错误与Jest在Node.js环境中运行的事实有关,并且您正在使用导出默认值,这在Node.js中默认不起作用(Node使用module.exports)。我猜您是在使用webpack进行开发/生产构建,而不是测试环境。

你在开玩笑吗?如果是这样,您需要设置babeljest,以便jest知道如何读取ES模块语法(import/export)。

请在此处阅读更多信息:https://vue-test-utils.vuejs.org/guides/#testing-带有jest的单文件组件

这可能是烦人的设置,让我知道,如果你需要更多的帮助,让它工作。

 类似资料:
  • 我有一个带有SSR、Vue Cli、Vuex和Typescript的Vue3项目。 在路由器页面中,我需要将数据提交到Vuex存储。在一个。vue文件我只是使用这个$在vuex中键入的存储。d、 例如: 但是如何从没有this或vue实例的ts文件(router/index.ts)中执行此操作呢。 我尝试导入存储索引文件并提交: 但我犯了个错误 类型“”上不存在属性“提交”()= 存储文件(因为我

  • 我的任务是创建一个支持typescript的vue3应用程序,我还必须使用vuex进行状态管理,使用vue路由器进行基本路由。但我无法在此项目中使用vue cli 我目前的代码: 由于我从未在vue项目中使用过typescript 您能否向我推荐一些博客、教程,其中有人使用这些工具从头开始构建vue3应用程序,但没有vue cli? 全速行驶: 在VueJS 3.0框架上使用TypeScript编

  • 如何在玩笑中清除模拟函数中的间谍?如果原始函数不是的话,工作得非常好。如何正确清除中的所有间谍?这个问题可能是如何在单个测试基础上更改模拟实现[Jestjs]的重复,尽管我的问题描述了一个不涉及多个模块的更简单的场景。

  • 我有以下Vuex商店(main.js): 我还为Vue路由器(routes.js)定义了以下路由: 我试图这样做,如果Vuex存储了对象,并且将属性设置为,则路由器会将用户重定向到登录页面。 我有这个: 问题是,我不知道如何从函数内部访问Vuex商店的对象。 我知道我可以在组件中使用来设置路由器保护逻辑,但这会使每个组件变得杂乱无章。我想在路由器级别集中定义它。

  • 我试图使用ESLint linter与Jest测试框架。 Jest测试使用一些全局变量运行,比如,我需要告诉linter关于它的信息;但棘手的是目录结构,Jest将测试与源代码一起嵌入文件夹中,因此目录结构类似于: 通常,我会将所有测试放在一个目录下,我可以在那里添加一个文件来添加全局变量。。。但是我当然不想在每一个目录中添加文件。 目前,我刚刚将测试全局变量添加到了global文件中,但由于这意