mocha——单元测试

这篇具有很好参考价值的文章主要介绍了mocha——单元测试。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


单元测试是用来对一个模块、一个函数或者一个类来进行正确性检验的测试工作。
单元测试由开发人员执行。
将测试用例放到一个测试模块里,就是一个完整的单元测试。
mocha是单元测试的一个框架

mocha介绍

mocha是JavaScript的一种单元测试框架,既可以在浏览器环境下运行,也可以在Node.js环境下运行。
使用mocha,我们就只需要专注于编写单元测试本身,然后,让mocha去自动运行所有的测试,并给出测试结果。

mocha的特点主要有

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

编写测试

测试代码:
sum.js

module.exports = function (...rest) {
    var sum = 0;
    for (var i of rest) {
        sum+=i
    }

    return sum
}

直接测试

text.js

var sum = require("./sum")
console.log(sum(1,2,3))

输出 6,结果正确

使用内置断言

  • 如果测试用例通过,正常运行不会报错;如果测试用例出错,就会报错
  • 如果一个测试用例出错,之后的测试用例就不会再执行了
  • 无法自动运行
var sum = require("./sum")
// 内置断言
var assert = require("assert")

// 断定不传参结果为0
assert.strictEqual(sum(), 0)

assert.strictEqual(sum(1, 3), 4)

assert.strictEqual(sum(1,2,3),6)

使用mocha

配置

  • 安装:npm i mocha
  • 这里没有使用全局安装,所以在终端直接输入mocha会报错,所以做如下更改
    package.json
{
  "name": "mocha",
  "version": "1.0.0",
  "description": "",
  "main": "sum.js",
  "scripts": {
    "test": "mocha"
  },
  "author": "",
  "license": "ISC",
  "dependencies": {
    "mocha": "^10.0.0"
  }
}

这样每次执行 npm test 就可以运行mocha了。
mocha会自动查找text文件夹 ,并且执行text文件夹下的全部测试文件。

基本使用方法

  • describe("",()=>{}) 一组测试,可以嵌套

  • it("",()=>{}) 一个测试
    他们的 第一个属性可以显示在测试报告中

  • 无论测试正确与错误,测试结果都会显示在测试报告中

  • 前面的测试不正确不会影响后面的测试
    eg:
    mocha——单元测试

var sum = require("../sum")
// 内置断言
var assert = require("assert")

// 断定不传参结果为0
assert.strictEqual(sum(), 0)
assert.strictEqual(sum(1, 3), 4)
assert.strictEqual(sum(1, 2, 3), 6)

// describe 一组测试,嵌套
// it 一个测试
// 第一个属性可以显示在测试报告中
describe("大的组1测试", () => {
    describe("小的组1测试", () => {
        it("sum()结果应该返回0", () => {
            assert.strictEqual(sum(), 0)
        })
        it("sum(1)结果应该返回10", () => {
            assert.strictEqual(sum(1), 10)
        })
        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测试", () => {
        
    })
})
describe("大的组2测试", () => {
    
})

测试结果:
mocha——单元测试

chai断言库

  • 下载: npm i chai
  • chai 有三种风格:shoule,expect,assert
    assert风格
var chai = require("chai")
var assert = chai.assert

describe('assert Demo',function (){
    it('use assert lib', function () {
    //   模拟函数的返回值
        var value = "hello"
        assert.typeOf(value, 'string')
        assert.equal(value, 'hello')
        assert.lengthOf(value,5)
  }) 
})

mocha——单元测试

should风格

var chai = require("chai")
chai.should()

describe('should Demo',function (){
    it('use should lib', function () {
    //   模拟函数的返回值
        var value = "hello"
        value.should.be.a('string')
        value.should.equal('hello')
        value.should.not.equal('hello2')
        value.should.have.length(5)
        // 可以合并写
        value.should.exist.and.equal('hello').and.have.length(5).and.be.a('string')
  }) 
})

mocha——单元测试
expect风格

var chai = require("chai")
var expect = chai.expect

describe('expect Demo',function (){
    it('use expect lib', function () {
    //   模拟函数的返回值
        var value = "hello"
        var number = 3

        expect(number).to.be.at.most(5)//小于等于5
        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)
    
  }) 
})

mocha——单元测试

异步测试

两种写法: done写法 和 await写法

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

describe('异步测试', () => {
    it("异步的去文件", (done) => {
        // ./1.txt是按测试的文件路径写的,而不是相对于当前文件写的
        fs.readFile("./1.txt", "utf-8", (err, data) => {
            if (err) {
                done(err)
            } else {
                assert.strictEqual(data, "hello,hello")
                // done表示测试用例调用结束之后再判断测试是否正确
                done()
            }
        })
    })
    
})

describe('异步测试2', () => {
    it("异步的去文件2",async () => {
        // ./1.txt是按测试的文件路径写的,而不是相对于当前文件写的
        var data = await fsp.readFile("./1.txt", "utf-8")
        assert.strictEqual(data,"hello,hello")
    }) 
})

http测试

app.js:

const koa = require("koa")
const app = new koa()

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

// app.listen(3000)

module.exports = app

text.js:

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

// 手动启动故服务器的测试
// describe('测试接口1', () => {
//     it('返回html代码片段测试1', async() => {
//         // axios,后端也有 npm i axios
//         var res = await axios.get("http://localhost:3000/")
//         assert.strictEqual(res.data,"<h1>hello</h1>")
//     })
// })

// 自动启动服务器的测试 
describe('测试接口2', () => {
    let server = app.listen(3000)
    it('返回html代码片段测试2', async() => {
        await supertest(server).get("/")
            .expect("Content-type", /text\/html/)
            .expect(200, "<h1>hello</h1>")

    })

    // 钩子函数,执行完所有测试用例之后,执行该函数
    after(() => {
        server.close()
    })

})

测试:
mocha——单元测试

钩子函数

四种钩子函数

	before(() => {
        console.log("执行所有测试用例之前,执行该函数")
    })
    after(() => {
         console.log("执行完所有测试用例之后,执行该函数")
    })
    beforeEach(() => {
        console.log("每一个测试用例开始前执行")
    })
    afterEach(() => {
        console.log("每一个测试用例结束后执行")
    })

eg:

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


// 自动启动服务器的测试 
describe('测试接口2', () => {
    let server
    it('返回html代码片段测试2', async() => {
        await supertest(server).get("/")
            .expect("Content-type", /text\/html/)
            .expect(200, "<h1>hello</h1>")

    })

    // 钩子函数,执行所有测试用例之前,执行该函数
    before(() => {
        console.log("执行所有测试用例之前,执行该函数")
        server = app.listen(3000)
    })

    // 钩子函数,执行完所有测试用例之后,执行该函数
    after(() => {
         console.log("执行完所有测试用例之后,执行该函数")
        server.close()
    })

    // 
    beforeEach(() => {
        console.log("每一个测试用例开始前执行")
    })
    afterEach(() => {
        console.log("每一个测试用例结束后执行")
    })

})

输出:
mocha——单元测试文章来源地址https://www.toymoban.com/news/detail-470804.html

到了这里,关于mocha——单元测试的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 如何在Visual Studio Code中用Mocha对TypeScript进行测试

    目录 使用TypeScript编写测试用例 在Visual Studio Code中使用调试器在线调试代码 首先,本文不是一篇介绍有关TypeScript、JavaScript或其它编程语言数据结构和算法的文章。如果你正在准备一场面试,或者学习某一个课程,互联网上可以找到许多相关的资源,我个人比较推崇hackerran

    2024年02月14日
    浏览(63)
  • Springboot 多模块项目集成Jacoco统计单元测试覆盖率

    jenkis服务器需要配置Jacoco 常见报错: Not compiling test sources Skipping JaCoCo execution due to missing execution data file. 修改插件配置

    2024年02月09日
    浏览(39)
  • “一个测试用例是否为单元测试”的争议

    “一个测试用例是否为单元测试”的争议 Google看到测试领域中这种“百家争鸣”的现象后,创立了自己的命名方式,将测试分为 小型测试、中型测试和大型测试 ,而单元测试是小型或中型测试的具体实现形式。具体如下表: 小型测试 中型测试 大型测试 单元测试 单元测试

    2024年02月12日
    浏览(40)
  • 【单元测试】测还是不测,这是一个问题

    这篇文章也可以在我的博客中查看 相信大家从小就被千叮万嘱要做单元测试。然后秉承这一信念,成为了一个测试狂魔。凡有代码,测!覆盖!最终,一波操作猛如虎:467测试,0错误, 0自信 。 第二天。 你为了优化,颤抖着手更改了一行代码。果不其然发现牵连了 1e9 个测

    2024年02月03日
    浏览(49)
  • 如何在Vue中进行单元测试?什么是Vue的模块化开发?

    在Vue中进行单元测试可以提高代码的可维护性和可读性,同时也能够帮助开发者更快地找到代码中的问题和潜在的错误。下面是一些在Vue中进行单元测试的步骤: 安装单元测试工具 首先需要安装一个单元测试工具,例如Jest或Mocha。可以使用npm或yarn进行安装。 创建测试文件

    2024年02月12日
    浏览(42)
  • 若依微服务版(SpringBoot/SpringCloudAlibaba)中在单个服务模块中进行单元测试

    若依微服务版手把手教你本地搭建环境并运行前后端项目: 若依微服务版手把手教你本地搭建环境并运行前后端项目_霸道流氓气质的博客-CSDN博客 在上面的基础上需要在某个服务模块中进行单元测试。 注: 博客: 霸道流氓气质的博客_CSDN博客-C#,架构之路,SpringBoot领域博主

    2024年02月06日
    浏览(56)
  • 请给 SpringBoot 写一个优雅的单元测试吧?

    当一个测试满足下面任意一点时,测试就不是单元测试 (by Michael Feathers in 2005): 与数据库交流 与网络交流 与文件系统交流 不能与其他单元测试在同一时间运行 不得不为运行它而作一些特别的事 如果一个测试做了上面的任何一条,那么它就是一个集成测试。 这是一个单元测

    2024年02月17日
    浏览(41)
  • linux环境编程(1): 实现一个单元测试框架-2

    在之前的文章中, 介绍了如何实现一个类似gtest的单元测试框架, 完整的项目代码可以参考这里: https://github.com/kfggww/cutest . 近期对cutest的实现做了一些修改, 包括: Test Suite的声明宏, 修改为TEST_SUITE 增加Test Suite的声明宏TEST_SUITE_WITH. 可传递Suite的init和cleanup函数, 在Suite中每个Cas

    2024年02月12日
    浏览(35)
  • 一个简单好用的C语言单元测试框架-Unity

    Unity是一个用于C语言的轻量级单元测试框架。它由Throw The Switch团队开发,旨在简化嵌入式系统的单元测试。单元测试中单元的含义,单元就是人为规定的最小的被测功能模块,如C语言中单元指一个函数,Java里单元指一个类,图形化的软件中可以指一个窗口或一个菜单等。在

    2024年01月21日
    浏览(58)
  • 一个简单好用的C++语言单元测试框架-GoogleTest

    GoogleTest 是由 Google 开发的一个用于编写 C++ 单元测试的框架。单元测试中单元的含义,单元就是人为规定的最小的被测功能模块,如C语言中单元指一个函数,Java里单元指一个类,图形化的软件中可以指一个窗口或一个菜单等。在实际项目中,单元测试往往由开发人员完成。

    2024年01月19日
    浏览(97)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包