NodeJS Mocha测试⑩④

news2025/1/17 2:54:35

文章目录

  • ✨文章有误请指正,如果觉得对你有用,请点三连一波,蟹蟹支持😘
  • 前言
  • Mocha
  •    1、编写测试
  •    2、SumJS代码
  •    3、使用内置断言库
  •    4、第三方库 chai断言库
  •    5、第三方库 异步断言
  •    6、http测试
  •    7、钩子函数
  • 更多包工具
  • 总结


✨文章有误请指正,如果觉得对你有用,请点三连一波,蟹蟹支持😘

                    ⡖⠒⠒⠒⠤⢄⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸   ⠀⠀⠀⡼⠀⠀⠀⠀ ⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢶⣲⡴⣗⣲⡦⢤⡏⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣰⠋⠉⠉⠓⠛⠿⢷⣶⣦⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢠⠇⠀⠀⠀⠀⠀⠀⠘⡇⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡞⠀⠀⠀⠀⠀⠀⠀⢰⠇⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⡴⠊⠉⠳⡄⠀⢀⣀⣀⡀⠀⣸⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⢸⠃⠀⠰⠆⣿⡞⠉⠀⠀⠉⠲⡏⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠈⢧⡀⣀⡴⠛⡇⠀⠈⠃⠀⠀⡗⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⣱⠃⡴⠙⠢⠤⣀⠤⡾⠁⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⢀⡇⣇⡼⠁⠀⠀⠀⠀⢰⠃⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⣸⢠⣉⣀⡴⠙⠀⠀⠀⣼⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⡏⠀⠈⠁⠀⠀⠀⠀⢀⡇⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⢸⠃⠀⠀⠀⠀⠀⠀⠀⡼⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⢸⠀⠀⠀⠀⠀⠀⠀⣰⠃⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⣀⠤⠚⣶⡀⢠⠄⡰⠃⣠⣇⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⢀⣠⠔⣋⣷⣠⡞⠀⠉⠙⠛⠋⢩⡀⠈⠳⣄⠀⠀⠀⠀⠀⠀⠀
⠀⡏⢴⠋⠁⠀⣸⠁⠀⠀⠀⠀⠀ ⠀⣹⢦⣶⡛⠳⣄⠀⠀⠀⠀⠀
⠀⠙⣌⠳⣄⠀⡇   不能   ⡏⠀⠀  ⠈⠳⡌⣦⠀⠀⠀⠀
⠀⠀⠈⢳⣈⣻⡇   白嫖 ⢰⣇⣀⡠⠴⢊⡡⠋⠀⠀⠀⠀
⠀⠀⠀⠀⠳⢿⡇⠀⠀⠀⠀⠀⠀⢸⣻⣶⡶⠊⠁⠀⠀
⠀⠀⠀⠀⠀⢠⠟⠙⠓⠒⠒⠒⠒⢾⡛⠋⠁⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⣠⠏⠀⣸⠏⠉⠉⠳⣄⠀⠙⢆⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⡰⠃⠀⡴⠃⠀⠀⠀⠀⠈⢦⡀⠈⠳⡄⠀⠀⠀⠀⠀⠀⠀
⠀⠀⣸⠳⣤⠎⠀⠀⠀⠀⠀⠀⠀⠀⠙⢄⡤⢯⡀⠀⠀⠀⠀⠀⠀
⠀⠐⡇⠸⡅⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠹⡆⢳⠀⠀⠀⠀⠀⠀
⠀⠀⠹⡄⠹⡄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣇⠸⡆⠀⠀⠀⠀⠀
⠀⠀⠀⠹⡄⢳⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢹⡀⣧⠀⠀⠀⠀⠀
⠀⠀⠀⠀⢹⡤⠳⡄⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣷⠚⣆⠀⠀⠀⠀
⠀⠀⠀⡠⠊⠉⠉⢹⡀⠀⠀⠀⠀⠀⠀⠀⠀⢸⡎⠉⠀⠙⢦⡀⠀
⠀⠀⠾⠤⠤⠶⠒⠊⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠙⠒⠲⠤⠽   

前言

  1. Node.js是一个javascript运行环境。它让javascript可以开发后端程序,实现几乎其他后端语言实现的所有功能,可以与```PHP、Java、Python、.NET、Ruby等后端语言平起平坐。
  2. Nodejs是基于V8引擎,V8是Google发布的开源JavaScript引擎,本身就是用于Chrome浏览器的JS解释,但是Node之父 Ryan Dahl在这里插入图片描述把这V8搬到了服务器上,用于做服务器的软件。

Mocha


  • 功能
  1. 单元测试通过后有什么意义呢? 如果我们对abs()函数代码做了修改,只需要再跑一遍单元测试,如果通过,说明我们的修改不会对abs()函数原有的行为造成影响,如果测试不通过,说明我们的修改与原有行为不一致,要么修改代码,要么修改测试。
  2. 这种以测试为驱动的开发模式最大的好处就是确保一个程序模块的行为符合我们设计的测试用例。在将来修改的时候,可以极大程度地保证该模块行为仍然是正确的。
    mocha是JavaScript的一种单元测试框架,既可以在浏览器环境下运行,也可以在Node.js环境下运行。
  3. 使用mocha,我们就只需要专注于编写单元测试本身,然后,让mocha去自动运行所有的测试,并给出测试结果。

mocha的特点主要有:

  1. 既可以测试简单的JavaScript函数,又可以测试异步代码,因为异步是JavaScript的特性之一;
  2. 可以自动运行所有测试,也可以只运行特定的测试;
  3. 可以支持before、after、beforeEach和afterEach钩子来编写初始化代码。

   1、编写测试

  • 使用库 :mocha

    Npm : https://www.npmjs.com/package/mocha

   2、SumJS代码

module.exports = function (...rest) {
    var sum = 0;

    for (let m of rest) {
        sum += m
    }
    return sum
}

   3、使用内置断言库

导入库 : const assert =require(“assert”)

  1. 前置配置

package.json配置

在这里插入图片描述

  1. 文件创建规范

在这里插入图片描述

  1. 内置断言方式代码测试
const assert = require("assert")

const sum = require("../sum")

//describe 一组测试,嵌套 、it 一个测试
describe("大的组1测试", () => {
    describe('小的组1测试', () => {
        it("sum() 结果应该返回 0", () => {
            assert.strictEqual(sum(), 0)
        })
        it("sum(1) 结果应该返回 1", () => {
            assert.strictEqual(sum(1), 1)
        })
    })

    describe('小的组2测试', () => {
        it("sum(1,2) 结果应该返回 3", () => {
            assert.strictEqual(sum(1, 2), 3)
        })
        it("sum(1,2,3) 结果应该返回 6", () => {
            assert.strictEqual(sum(1, 2, 3), 6)
        })
    })

})

describe("大的组2测试", () => {
    it("Sum(999) 输出结果为999", () => {
        assert.strictEqual(sum(999, 0), 999)
    })
})

输出演示

在这里插入图片描述

   4、第三方库 chai断言库

官方 : https://www.chaijs.com/

图示

在这里插入图片描述

代码演示

chai.assert

const chai = require('chai')
const assert = chai.assert;

describe('功能测试', function () {
    it('功能一切正常!', function () {
        var value = "hello";
        assert.typeOf(value, 'string') //类型是否是字符串
        assert.equal(value, 'hello') //是不是等于Hello
        assert.lengthOf(value, 5) //长度是否等于5
    })
})

chai.should

const chai = require('chai');
chai.should();

describe('测试功能!', function () {
    it('功能一切正常!', function () {
        var value = 'hello'
        //代码翻译 : 该值应该存在 应该等于 hello 且 长度为5 且 是字符串类型 且 不等于hello2 
        value.should.exist.and.equal('hello').and.have.length(5).and.be.a('string').and.not.equal('hellow')
    })
});

chai.expect;

var chai = require('chai');
var expect = chai.expect;

describe('功能测试', function () {
    it('功能一些正常!', function () {
        var number = 3
        var value = 'hello'

        expect(number).to.be.at.most(5) //小于等于3
        expect(number).to.be.at.least(3) //大于大于3
        expect(number).to.be.within(1, 4) //介于1,4之间

        expect(value).to.exist //存在
        expect(value).to.be.a('string') //类型类型
        expect(value).to.equal('hello') //是否等于
        expect(value).to.not.equal('您好') //不等于
        expect(value).to.have.length(5) //长度
    })
});

   5、第三方库 异步断言

const fs = require("fs")
const fsp = fs.promises

var assert = require("assert") //内置库

//fs文件读取异步测试
describe('异步测试1', () => {
    it("异步读取文件1", (done) => {
        fs.readFile("./1.txt", "utf8", (err, data) => {
            if (err) {
                done(err)
            } else {
                assert.strictEqual(data, "hello")
                done()
            }
        })
    })
})


//primise文件读取异步测试
describe('异步测试2', () => {
    it("异步读取文件2", async () => {
        var data = await fsp.readFile("./1.txt", "utf8")
        assert.strictEqual(data, "hello")
    })
})

   6、http测试

第三方库 : npm install supertest

------服务器------
const Koa = require("koa")
const app = new Koa()

app.use((ctx) => {
    ctx.body = "<h1>hello</h1>"
})

// app.listen(3000)

module.exports = app


------客户端------
var axios = require("axios")
var assert = require("assert")

var supertest = require("supertest")
var app = require("../app")

// 普通测试
describe('测试接口1', () => {
  it("返回html代码片段测试1", async () => {
    //axios axios.get  
    var res = await axios.get("http://localhost:3000/")
    assert.strictEqual(res.data, "<h1>hello</h1>")
  })
})

//利用supertest库模块
describe('测试接口2', () => {
  let server = app.listen(3000)
  it("返回html代码片段测试2", async () => {
    //axios axios.get  
    await supertest(server).get("/")
      .expect("Content-Type", /text\/html/)
      .expect(200, '<h1>hello</h1>')
  })

  after(() => {
    server.close()
  })
})

   7、钩子函数

describe('#hello.js', () => {
    describe('#sum()', () => {
        before(function () { //执行之前
            console.log('before:');
       });
        after(function () { //执行之后
            console.log('after.');
       });
        beforeEach(function () { //每个执行之前
            console.log(' beforeEach:');
       });
        afterEach(function () { //每个执行之后
            console.log(' afterEach.');
       });
   });
});

钩子演示代码

第一种

var sum = require("../sum")
var chai = require("chai")
var assert = chai.assert
var expect = chai.expect
chai.should()

//describe 一组测试,嵌套 、 it 一个测试
describe("大的组1测试", () => {
    before(function () {
        console.log('before:');
    });

    after(function () {
        console.log('after.');
    });

    beforeEach(function () {
        console.log('  beforeEach:');
    });

    afterEach(function () {
        console.log('  afterEach.');
    });

    describe('小的组1测试', () => {
        it("sum() 结果应该返回 0", () => {
            assert.equal(sum(), 0)
        })
        it("sum(1) 结果应该返回 1", () => {

            sum(1).should.exist.and.equal(1)
        })
    })

    describe('小的组2测试', () => {
        it("sum(1,2) 结果应该返回 3", () => {

            expect(sum(1, 2)).to.equal(3)
        })
        it("sum(1,2,3) 结果应该返回 6", () => {
            assert.equal(sum(1, 2, 3), 6)
        })
    })

})

在这里插入图片描述

第二种

var sum = require("../sum")
var chai = require("chai")
var assert = chai.assert
var expect = chai.expect
chai.should()

//describe 一组测试,嵌套 、 it 一个测试
describe("大的组1测试", () => {


    describe('小的组1测试', () => {
        it("sum() 结果应该返回 0", () => {
            assert.equal(sum(), 0)
        })
        it("sum(1) 结果应该返回 1", () => {

            sum(1).should.exist.and.equal(1)
        })

        before(function () {
            console.log('before:');
        });

        after(function () {
            console.log('after.');
        });

        beforeEach(function () {
            console.log('  beforeEach:');
        });

        afterEach(function () {
            console.log('  afterEach.');
        });
    })

    describe('小的组2测试', () => {
        it("sum(1,2) 结果应该返回 3", () => {

            expect(sum(1, 2)).to.equal(3)
        })
        it("sum(1,2,3) 结果应该返回 6", () => {
            assert.equal(sum(1, 2, 3), 6)
        })
    })

})

在这里插入图片描述

更多包工具


工具 : https://www.npmrc.cn/en/awesome-npm-packages.html/pageTools

总结

以上是个人学习Node的相关知识点,一点一滴的记录了下来,有问题请评论区指正,共同进步,这才是我写文章的原因之,如果这篇文章对您有帮助请三连支持一波

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/678421.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Linux系统命令】——平均负载分析,以及cpu的性能检测,进程上下文切换分析

目录 1 平均负载 1.1概念 1.2 uptime指令&#xff08;检测平均负载&#xff09; 1.3 负载分析 1.4 单核cpu负载分析 1.5 不同时间内的load值分析 1.6 平均负载和cpu使用率的区别 2. 压测命令 2.1 对cpu进行压力测试 2.2 对内存进行压力测试 2.3对磁盘压力测试 2.…

RocketMQ常用操作

RocketMQ历史及发展 如果想要了解RocketMQ的历史&#xff0c;则需了解阿里巴巴中间件团队中的历史 2011年&#xff0c;Linkin(领英&#xff1a;全球知名的职场社交平台)推出Kafka消息引擎&#xff0c;阿里巴巴中间件团队在研究了Kafka的整体机制和架构设计之后&#xff0c;基…

NCI-2

10.5 NFCEE 状态 NFCC 使用此控制消息向 DH 通知启用的 NFCEE 状态的变化。 NFCC 发送 NFCEE_STATUS_NTF 来报告启用的 NFCEE 状态的变化。 对于任何禁用或无响应的 NFCEE&#xff0c;NFCC 不应发送 NFCEE_STATUS_NTF。 当启用 NFCEE 并且 NFCC 检测到与该 NFCEE 通信时存在不…

【图表】echart

文章目录 概述基础概念属性使用简单入门使用柱状图的中间显示数据 来源 概述 ECharts是一款基于JavaScript的数据可视化图表库&#xff0c;提供直观&#xff0c;生动&#xff0c;可交互&#xff0c;可个性化定制的数据可视化图表。ECharts最初由百度团队开源&#xff0c;并于2…

Power Strings

Power Strings 题面翻译 题意简述&#xff1a; 求一个字符串由多少个重复的子串连接而成。 例如 ababab 由三个 ab 连接而成&#xff0c;abcd 由 abcd 由一个 abcd 连接而成。 输入格式 本题多组数据。 每一组数据仅有一行&#xff0c;这一行仅有一个字符串 s s s。 输…

nmap常用扫描命令

1. nmap扫描一台机器 nmap 192.168.133.672. nmap扫描一台机器,查看打开端口及详细信息 nmap -v 192.168.133.673. nmap 指定端口/端口范围扫描 nmap -p 1-65535 192.168.133.67nmap -p 1-100,135,8080,443 192.168.133.67 <

chatgpt赋能python:Python电脑上图标是什么样子?

Python电脑上图标是什么样子&#xff1f; 在计算机系统中&#xff0c;图标是一种可视化的元素&#xff0c;用于代表具体的应用程序或文件。Python是一种开源的高级编程语言&#xff0c;越来越多的人开始使用它进行软件开发和数据科学。在电脑上&#xff0c;Python的图标是怎样…

简单Web UI 自动化测试框架 seldom

pyse 更名为 seldom WebUI automation testing framework based on Selenium and unittest. 基于 selenium 和 unittest 的 Web UI自动化测试框架。 特点 提供更加简单API编写自动化测试。提供脚手架&#xff0c;快速生成自动化测试项目。自动生成HTML测试报告生成。自带断言方…

3.跑马灯

1.GPIO的输出模式&#xff1a; 推挽模式输出&#xff1a;因为LED0和LED1阳极都是3.3V&#xff0c;需要将阴极设置为低电平才可以点亮LED&#xff1b;操作io口时&#xff0c;必须引入源文件和头文件&#xff1b;关于时钟的文件存放在rcc中&#xff1b; 2.GPIO库函数介绍&#…

【传感器】一种鲁棒的imu比例系数与偏移的校准算法

简介 最近在学习传感器相关的知识&#xff0c;在国外的一篇论文学习过程中&#xff0c;觉得这篇论文的校准方法是个不错的参考。 这种校准简单且比较鲁棒的算法&#xff0c;操作简单&#xff0c;且除了偏移与比例系数&#xff0c;还可以估计出传感器 xyz 轴相对于标准正交三轴…

《Python自动化测试九章经》

Python是当前非常流行的一门编程语言&#xff0c;它除了在人工智能、数据处理、Web开发、网络爬虫等领域得到广泛使用之外&#xff0c;他也非常适合软件测试人员使用&#xff0c;但是&#xff0c;对于刚入行的测试小白来说&#xff0c;并不知道学习Python语言可以用来完成哪些测…

chatgpt赋能python:Python用于炒股

Python用于炒股 随着互联网和数据科学的发展&#xff0c;越来越多的投资者开始依靠计算机和数据科学来进行更高效的投资。Python是一种广泛使用的编程语言&#xff0c;可以帮助投资者更好地处理数据和自动化交易。本文将简要介绍Python如何用于炒股&#xff0c;并分享一些有用…

canvas详解02-样式和颜色控制

在绘制图形的章节里&#xff0c;我只用到默认的线条和填充样式。而在这一章里&#xff0c;我们将会探讨 canvas 全部的可选项&#xff0c;来绘制出更加吸引人的内容。 #色彩 Colors 到目前为止&#xff0c;我们只看到过绘制内容的方法。如果我们想要给图形上色&#xff0c;有两…

捕捉信号/信号的处理步骤

一、信号会在合适的时候被处理 先摆出一个结论&#xff1a;信号会在合适的时候被处理。 当然&#xff0c;这里说的信号默认排除了实时信号&#xff0c;那个是已接收到信号就立马处理信号。 上面说的合适的时候其实就是进程从内核态切换到用户态的时候。 二、何为内核态和用户…

Golang -> Golang 变量

Golang 变量 Golang 变量使用的三种方式变量的声明&#xff0c;初始化和赋值程序中 号的使用数据类型的基本介绍int 的无符号的类型&#xff1a;int 的其它类型的说明:整型的使用细节 小数类型/浮点型小数类型分类浮点型使用细节 字符类型字符类型使用细节字符类型本质探讨 布…

java面向对象部分

在学校时学的比较乱&#xff0c;趁暑假再系统的学一遍 访问权限控制 private&#xff1a;私有&#xff0c;只能被本身类访问 什么都不写&#xff1a;默认&#xff0c;只能被类本身和同包中的其他类访问 protected&#xff1a;受保护的&#xff0c;只能被类本身和同包中的其…

计算物理专题:实对称矩阵特征值的求解问题

我们需要求出一个实对称阵的全部特征值与特征向量实对称矩阵特征值的求解是计算量子力学的基础之一&#xff08;算符是厄米的&#xff09;同时&#xff0c;实对称矩阵的求解也是使用有限差分法解本征方程的重要方法之一 雅克比方法 我知道这个推导过程非常的复杂&#xff0c;所…

计算物理专题:双向打靶法解决本征值问题

计算物理专题&#xff1a;双向打靶法解决本征值问题 双向打靶法全部代码 EigenMethods.py import numpy as np import matplotlib.pyplot as plt from SchrodingerTools import *#type-ode1: ## y(x)f(x)y(x) g(x) ##tips: ##lambda eigen,x:f(eigen,x)def replace_eigen(ei…

365天深度学习训练营-第T3周:天气识别

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f366; 参考文章&#xff1a;TensorFlow入门实战&#xff5c;第3周&#xff1a;天气识别&#x1f356; 原作者&#xff1a;K同学啊|接辅导、项目定制 我的环境&#xff1a; 语言环境&#xff1a…

Web网页制作-知识点(4)——CSS盒子模型、弹性盒模型(flex box)、文档流、浮动、清除浮动、定位、圆角、阴影

目录 CSS盒子模型 概念 弹性盒模型&#xff08;flex box&#xff09; 内容 父元素上的属性 display属性 flex-direction属性 justify-content属性 align-items属性 子元素上的属性 flex 文档流&#xff08;标准流&#xff09; 浮动 定义 浮动的原理 清除浮动 …