使用 Jest 和 Typescript 对 VueJ 进行单元测试 - 未安装组件

Posted

技术标签:

【中文标题】使用 Jest 和 Typescript 对 VueJ 进行单元测试 - 未安装组件【英文标题】:Unit testing VueJs with Jest and Typescript - components not mounted 【发布时间】:2020-09-05 17:44:38 【问题描述】:

我们正在使用 VueJs 构建一个应用程序。我们之前有使用 Jasmine 和 karma 进行 Angular 单元测试的经验,因此我们决定将 Typescript 用于我们的 VueJs 应用程序。

目前我已经为组件编写了非常简单的规范,但似乎组件没有安装。

这是一个组件的示例:

export default class TableOverview extends Vue 
  public mounted() 
    console.log("mounted");
  

这是我的规范

describe("table-overview.vue", () => 
  it("logs mounted", () => 
    const wrapper = mount(TableOverview);

    expect(wrapper).toBeDefined();
  );
);

我在控制台日志中看不到任何内容。

我错过了什么?该项目是使用 Vue CLI v4.3.1

设置的

这是 Vue 信息

  System:
    OS: Windows 10 10.0.18363
    CPU: (8) x64 Intel(R) Core(TM) i7-6820HQ CPU @ 2.70GHz
  Binaries:
    Node: 8.11.3 - C:\Program Files\nodejs\node.EXE
    Yarn: Not Found
    npm: 5.6.0 - C:\Program Files\nodejs\npm.CMD
  Browsers:
    Edge: 44.18362.449.0
  npmPackages:
    @vue/babel-helper-vue-jsx-merge-props:  1.0.0
    @vue/babel-plugin-transform-vue-jsx:  1.1.2
    @vue/babel-preset-app:  4.2.3
    @vue/babel-preset-jsx:  1.1.2
    @vue/babel-sugar-functional-vue:  1.1.2
    @vue/babel-sugar-inject-h:  1.1.2
    @vue/babel-sugar-v-model:  1.1.2
    @vue/babel-sugar-v-on:  1.1.2
    @vue/cli-overlay:  4.2.3
    @vue/cli-plugin-babel: ~4.2.0 => 4.2.3
    @vue/cli-plugin-eslint: ~4.2.0 => 4.2.3
    @vue/cli-plugin-router:  4.2.3
    @vue/cli-plugin-typescript: ~4.2.0 => 4.2.3
    @vue/cli-plugin-unit-jest: ~4.2.0 => 4.2.3
    @vue/cli-plugin-vuex: ~4.2.0 => 4.2.3
    @vue/cli-service: ~4.2.0 => 4.2.3
    @vue/cli-shared-utils:  4.2.3
    @vue/component-compiler-utils:  3.1.1
    @vue/eslint-config-prettier: ^6.0.0 => 6.0.0
    @vue/eslint-config-typescript: ^5.0.1 => 5.0.2
    @vue/preload-webpack-plugin:  1.1.1
    @vue/test-utils: 1.0.0-beta.31 => 1.0.0-beta.31
    @vue/web-component-wrapper:  1.2.0
    eslint-plugin-vue: ^6.1.2 => 6.2.2
    jest-serializer-vue:  2.0.2
    typescript: ~3.7.5 => 3.7.5
    vue: ^2.6.11 => 2.6.11
    vue-class-component:  7.2.3
    vue-eslint-parser:  7.0.0
    vue-hot-reload-api:  2.3.4
    vue-jest:  3.0.5
    vue-loader:  15.9.1
    vue-property-decorator: ^8.3.0 => 8.4.1
    vue-style-loader:  4.1.2
    vue-template-compiler: ^2.6.11 => 2.6.11
    vue-template-es2015-compiler:  1.9.1
    vuetify: ^2.2.25 => 2.2.25
    vuetify-loader: ^1.4.3 => 1.4.3
    vuex: ^3.1.2 => 3.1.3
    vuex-class: ^0.3.2 => 0.3.2
    vuex-module-decorators: ^0.17.0 => 0.17.0
  npmGlobalPackages:
    @vue/cli: Not Found

【问题讨论】:

【参考方案1】:

这看起来很傻,但问题是 Jest 正在缓存我的测试结果。

我可以通过使用 --no-cache args 执行测试来解决此问题。

packages.json 中:

"test:unit": "vue-cli-service test:unit --no-cache"

可在此处找到其他替代方案:

How to clear Jest cache?

【讨论】:

以上是关于使用 Jest 和 Typescript 对 VueJ 进行单元测试 - 未安装组件的主要内容,如果未能解决你的问题,请参考以下文章

Jest & TypeScript:VS Code 找不到名称

使用 Jest/Typescript 测试 fs 库函数

使用 .ts 文件 (TypeScript) 配置 Jest 全局测试设置

使用 React、Typescript 和 ES6 进行 Jest 测试

Jest 遇到了意外的令牌(React、Typescript、Babel、Jest 和 Webpack 设置)

使用正确类型使用 Jest 和 Typescript 模拟 Express 请求