webpack配置篇(三十三):冒烟测试介绍和实际运用

Posted 凯小默

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了webpack配置篇(三十三):冒烟测试介绍和实际运用相关的知识,希望对你有一定的参考价值。

说明

玩转webpack学习笔记

冒烟测试 (smoke testing)

冒烟测试是指对提交测试的软件在进行详细深入的测试之前而进行的预测试,这种预测试的主要目的是暴露导致软件需重新发布的基本功能失效等严重问题。

冒烟测试执行

构建是否成功

每次构建完成 build 目录是否有内容输出

  • 是否有 JS、CSS 等静态资源文件
  • 是否有 html 文件

判断构建是否成功

在示例项目里面运行构建,看看是否有报错

在这里插入图片描述

判断基本功能是否正常

编写 mocha 测试用例

  • 是否有 JS、CSS 等静态资源文件
  • 是否有 HTML 文件

在这里插入图片描述

冒烟测试实战

1、在 test 文件夹里面添加冒烟测试的文件夹 smoke,在 smoke 文件夹里面添加模板项目 template,里面的文件就拷贝 my-project 的主要文件即可,如下所示
在这里插入图片描述

在这里插入图片描述

2、完成这一步之后,我们需要用到 rimraf 这个库去删除 dist 这个文件夹,先安装依赖

npm i rimraf -D

在这里插入图片描述

3、最后我们开始编写测试脚本 index.js

const path = require('path');
const webpack = require('webpack');
const rimraf = require('rimraf');

// 进入到 template 项目里
process.chdir(path.join(__dirname, 'template'));

// 构建之前需要删掉 dist 目录
rimraf('./dist', () => {
    // 找到打包的配置
    const prodConfig = require('../../lib/webpack.prod.js');
    // 通过 webpack 运行构建
    webpack(prodConfig, (err, stats) => {
        // 错误的情况
        if (err) {
            console.error(err);
            process.exit(2);
        }
        // 成功打印
        console.log(stats.toString({
            colors: true,
            modules: false, // 不显示
            children: false
        }));
    });
});

4、运行脚本

node test/smoke/index.js

如果报下面的错:

在这里插入图片描述

需要将 __dirname 改成 process.cwd()

__dirname会指向lib,process.cwd()指向template

参考资料:NodeJs中process.cwd()与__dirname的区别

  • process.cwd() 是当前执行node命令时候的文件夹地址 ——工作目录,保证了文件在不同的目录下执行时,路径始终不变
  • __dirname 是被执行的js 文件的地址 ——文件所在目录

修改如图:记得 base 里的都要替换掉
在这里插入图片描述

再次运行就会发现构建成功了

在这里插入图片描述

单元测试用例

需要编写两个文件

  • css-js-test.js:用来检测 JS、CSS 等静态资源文件
  • html-test.js:用来检测 HTML 文件

1、在开始之前,我们需要安装 mocha,以及glob-all

npm i mocha -D
npm i glob-all -D

在这里插入图片描述

在这里插入图片描述

关于 mocha 可以看一下我转载阮一峰大佬的文章:测试框架 Mocha 实例教程

2、编写测试脚本

html-test.js

const glob = require('glob-all');

describe('Checking generated html files', () => {
    it('should generate html files', (done) => {
    	// 同步判断是否生成文件
        const files = glob.sync([
            './dist/index.html',
            './dist/search.html'
        ]);

        if (files.length > 0) {
            done();
        } else {
            throw new Error('no html files generated');
        }
    });
});

css-js-test.js

const glob = require('glob-all');

describe('Checking generated css js files', () => {
    it('should generate css js files', (done) => {
        const files = glob.sync([
            './dist/index_*.js',
            './dist/index_*.css',
            './dist/search_*.js',
            './dist/search_*.css',
        ]);

        if (files.length > 0) {
            done();
        } else {
            throw new Error('no css js files generated');
        }
    });
});

3、在index里面添加测试用例

const path = require('path');
const webpack = require('webpack');
const rimraf = require('rimraf');
const Mocha = require('mocha');

// 设置超时时间
const mocha = new Mocha({
    timeout: '10000ms'
});

// 进入到 template 项目里
process.chdir(path.join(__dirname, 'template'));

// 构建之前需要删掉 dist 目录
rimraf('./dist', () => {
    // 找到打包的配置
    const prodConfig = require('../../lib/webpack.prod.js');
    // 通过 webpack 运行构建
    webpack(prodConfig, (err, stats) => {
        // 错误的情况
        if (err) {
            console.error(err);
            process.exit(2);
        }
        // 成功打印
        console.log(stats.toString({
            colors: true,
            modules: false, // 不显示
            children: false
        }));
        // 开始执行测试用例
        console.log('Webpack build success, begin run test.');
        // 添加测试用例
        mocha.addFile(path.join(__dirname, 'html-test.js'));
        mocha.addFile(path.join(__dirname, 'css-js-test.js'));
        // 跑用例
        mocha.run();
    });
});

4、执行脚本

node test/smoke/index.js

发现用例可以正常跑出来

在这里插入图片描述

以上是关于webpack配置篇(三十三):冒烟测试介绍和实际运用的主要内容,如果未能解决你的问题,请参考以下文章

webpack配置篇(三十五):持续集成和Travis CI

webpack配置篇(三十七):Git 规范和 Changelog 生成

webpack原理篇(六十三):插件基本结构介绍

webpack配置篇(三十二):使用ESLint规范构建脚本

webpack配置篇(三十八):语义化版本(Semantic Versioning)规范格式

webpack配置篇(三十六):发布构建包到npm社区