vue jest单元测试环境搭建

温馨提示:vue-cli3版本已经自带了jest的单元测试环境。

开始搭建

安装依赖包

npm install babel-plugin-transform-vue-jsx jest jest-serializer-vue vue-test-utils babel-jest vue-jest

 

创建测试目录(一般习惯放在项目的根目录)

mkdir test/unit
cd test/unit

 

创建配置文件

为什么要模拟加载部分静态文件呢?

因为jest单元测试无需真实加载静态资源与解析css样式,jest主要工作是业务逻辑的执行与数据的比对。

const path = require('path');

module.exports = {
    verbose: true,
    testURL: 'http://localhost/',
    rootDir: path.resolve(__dirname, '../../'),
    moduleFileExtensions: [
        'js',
        'json',
        'vue'
    ],
    moduleNameMapper: {
        '^@\/(.*?\.?(js|vue)?|)$': '<rootDir>/src/$1',   # @路径转换,例如:@/views/shop/info.vue -> rootDir/src/shop/info.vue
        '\\.(jpg|jpeg|png|gif|eot|otf|webp|svg|ttf|woff|woff2|mp4|webm|wav|mp3|m4a|aac|oga)$': '<rootDir>/test/unit/__mocks__/fileMock.js',   #  模拟加载静态文件
        '\\.(css|less)$': 'identity-obj-proxy'  # 模拟加载样式文件   
    },
    testMatch: [
        '<rootDir>/test/unit/**/*.spec.js'
    ],
    transform: {
        '^.+\\.js$': '<rootDir>/node_modules/babel-jest',
        '.*\\.(vue)$': '<rootDir>/node_modules/vue-jest'
    },
    testPathIgnorePatterns: [
        '<rootDir>/test/e2e'
    ],
    setupFiles: ['<rootDir>/test/unit/setup'],
    snapshotSerializers: ['<rootDir>/node_modules/jest-serializer-vue'],
    coverageDirectory: '<rootDir>/test/unit/coverage',
    collectCoverageFrom: [
        'src/views/**/*.(js|vue)',
        '!src/main.js',
        '!src/router/index.js',
        '!**/node_modules/**'
    ]
};

 

创建脚本命令

# package.json 添加以下运行命令

  "scripts": {
    ...
    "unit": "jest --config test/unit/jest.conf.js --coverage",
  },

 

运行

npm  run unit
报错:Plugin/Preset files are not allowed to export objects,webpack
该问题由:babel-jest@24.xxx的版本与babel@6.xx的版本不匹配造成的。
解决方法:我们把babel-jest@24.xx版本降为21.0.1就可以了

npm uninstall babel-jest
npm install babel-jest@21.0.1

修改完毕后再次运行
npm run unit

报错:error:Duplicate declaration "h" # h函数声明重复
该问题由:.babelrc重复使用了babel-plugin-transform-vue-jsx 造成的
{
  "presets": [
    "stage-3",
    ["env", {
      "modules": false,
      "targets": {
        "browsers": ["> 1%", "last 2 versions", "not ie <= 8"]
      }
    }],
    
  ],
  "plugins": ["transform-vue-jsx","syntax-jsx"],  # 保留这里的transform-vue-jsx
  "env": {
    "test": {
      "presets": ["env", "stage-3"],
      "plugins": ["transform-vue-jsx","transform-es2015-modules-commonjs", "dynamic-import-node"]  # 删除这里的transform-vue-jsx
    }
  }
}
修改完毕后再次运行
npm run unit

报错:error:Duplicate declaration "h" # h函数声明重复
这是babel-plugin-transform-vue-jsx的bug。如果出现这个错误建议使用babel-plugin-transform-vue-jsx@3.3.0版本查看详情
npm uninstall babel-plugin-transform-vue-jsx
npm install babel-plugin-transform-vue-jsx@3.3.0

报错:Cannot read property 'nodeName' of undefined
这是一般是UI框架组件库的版本太低,一些组件不支持node环境运行。
简单粗暴的解决方法:
npm update 更新依赖

修改完毕后再次运行
npm run unit # 完美

 

 
  

 目录结构:

测试用例:

# seckillActivity.spec.js

import {mount} from 'vue-test-utils'; # API文档

let test = () => {
    return true;
};
describe('测试', () => {
    it('验证测试', () => {
        expect(test()).toBe(true);
    });
})
;

静态文件加载

 

转载于:https://www.cnblogs.com/dudeyouth/p/10767249.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue是一种流行的前端框架,用于构建用户界面。为了正确地配置Vue环境,我们需要分别考虑生产、开发和测试环境。 首先,对于生产环境的配置,我们需要进行以下步骤: 1. 优化代码:我们需要通过打包工具如Webpack将Vue应用程序的代码进行压缩和合并,以减小文件大小和提高加载速度。 2. 配置路由:在生产环境中,我们可能需要配置服务器端路由来确保Vue应用程序在浏览器中正确地导航并处理URL。 3. 运行测试:在发布之前,我们应该运行一系列的测试,以确保Vue应用程序的质量和功能符合预期。 4. 部署到服务器:一旦我们完成了上述步骤,我们可以将打包后的Vue应用程序部署到生产服务器上,以便用户可以访问我们的应用。 对于开发环境的配置,我们主要需要以下步骤: 1. 配置开发服务器:我们可以使用一些工具如Vue CLI来快速搭建一个开发服务器,以便我们可以实时查看和测试我们的应用程序的变化。 2. 配置热模块替换:这个特性可以使我们在开发过程中快速更新修改的代码,无需重新加载整个页面。 3. 使用开发工具:与Vue配套的开发工具如Vue Devtools可以帮助我们在开发过程中调试和分析Vue应用程序。 最后,对于测试环境的配置,我们需要进行以下步骤: 1. 配置自动化测试:我们可以使用一些测试框架如Jest来编写和运行自动化测试,以确保Vue应用程序在各种情况下都能正常工作。 2. 模拟后端数据:在测试环境中,我们可以使用模拟数据来模拟后端的响应,以确保我们的应用程序在各种情况下都能正确处理数据。 3. 运行测试套件:在测试环境中,我们应该运行一系列的测试用例来验证Vue应用程序的功能和性能。 通过正确配置Vue的生产、开发和测试环境,我们可以更好地构建、测试和发布高质量的Vue应用程序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值