mocha入门学习

MoCha——单调块注意力模型 MoCha——单调块注意力模型 1.概述 加了soft attention的seq2seq模型,在很多领域取得了广泛的应用,例如机器翻译、词性标注等NLP任务,因为它们都可以看成是序列到序列的问题。但是对于语音问题,这个模型存在很明显的弊端: 时间复杂度很高: 因为对于soft attention的模型来说,decoder的每一个输出要计算encoder的每一个隐含状态的对应权重,所以时间复杂度为O(UT),其中U代表输出序列的长度,T代表输入序列的长度。对于语音任务来说,10ms的帧移就意味着1s的音频 阅读详情

作为一个项目而言,单元测试应该是必备的一部分,也是最容易被大家忽略的一部分,这篇文章就介绍一下mocha这个测试框架的用法。

DEMO地址 https://github.com/TimLiu1/study-mocha.git
一、环境搭建

首先先全局安装mocha

npm i mocha -g
二、 简单测试脚本书写

1、新建 calcu.js

//add
exports.add = (a,b) => {
    return a + b
}

2、新建测试脚本 calcu.test.js,一般命名规则测试脚本和原脚本同名,但是后缀名为.test.js

let calcu = require('./calcu');
let should = require("should");

describe("add func test",() => {
    it('2 add 2 should equal 4',() => {
      calcu.add(2,2).should.equal(4)
    })
})

这一段代码就是测试脚本,可以独立运行,使用命令

mocha demo1/mocha demo1/calcu.test.js

describe 表示测试套件,是一序列相关程序的测试

it表示单元测试(unit test),也就是测试的最小单位。

三、断言库简介

断言库可以理解为比较函数,也就是断言函数是否和预期一致,如果一致则表示测试通过,如果不一致表示测试黑失败,一个unit test里面可以包含多个断言语句。

本身mocha是不包含断言库的,所以必须引入第三方断言库,目前比较受欢迎的断言库 有 should.js、expect.js 、chai,具体的语法规则需要大家去查阅相关文档。

因为chai既包含should、expect和assert三种风格,可扩展性比较强。
下面简单的介绍一下这是那种风格

should

let num = 4+5
num.should.equal(9);
num.should.not.equal(10);

//boolean
'ok'.should.to.be.ok;
false.should.to.not.be.ok;

//type
'test'.should.to.be.a('string');
({ foo: 'bar' }).should.to.be.an('object');

expect

let expect = require("chai").expect;


// equal or no equal
let num = 4+5
expect(num).equal(9);
expect(num).not.equal(10);

//boolean
expect('ok').to.be.ok;
expect(false).to.not.be.ok;

//type
expect('test').to.be.a('string');
expect({ foo: 'bar' }).to.be.an('object');

assert

let assert = require("chai").assert;


// equal or no equal
let num = 4+5
assert.equal(num,9);

//type
assert.typeOf('test', 'string', 'test is a string');
四、mocha用法详解

平时长写的测试类型一共三种
- 常规函数测试
- 异步函数测试
- api测试

4.1、常规函数


测试就如我们上面写的第一个测试用例

4.2 异步函数测试


新建文件book.js

let fs = require('fs');

exports.read = (cb) => {
        fs.readFile('./book.txt', 'utf-8', (err, result) => {
            if (err) return cb(err);
            console.log("result",result);
            cb(null, result);
        }) 
}

新建文件book.test.js

let book = require('./book');
let expect = require("chai").expect;

let book = require('./book');
let expect = require("chai").expect;

describe("async", () => {
  it('read book async', function (done) {
    book.read((err, result) => {
      expect(err).equal(null);
      expect(result).to.be.a('string');
      done();
    })
  })
})

运行mocha book.test.js,我们会发现成功了,但是如果我们把book.js增加一个定时函数,改为如下例子

let fs = require('fs');

exports.read = (cb) => {
    setTimeout(function() {
        fs.readFile('./book.txt', 'utf-8', (err, result) => {
            if (err) return cb(err);
            console.log("result",result);
            cb(null, result);
        }) 
    }, 3000);
}

会发现报如下错误

Timeout of 2000ms exceeded.

这是因为mocha默认每个测试用例最多执行2000毫秒,如果到时没有得到结果,就报错。所以我们在进行异步操作的时候,需要额外指定timeout时间

mocha --timeout 5000 book.test.js

这样就保证测试用例成功

4.3、api测试


api测试需要用到一个的是模块 supertest,安装这个模块。

npm i supertest --save-dev

新建文件api.test.js

let expect = require("chai").expect;
let request = require('supertest');

describe("api", () => {
  it('get baidu information', function (done) {
    request('https://www.baidu.com')
      .get('/')
      .expect(200)
      .expect('Content-Type', /html/)
      .end(function (err, res) {
        expect(res).to.be.an('object');
        done();
      });
  })
})
五、命令行参数详解

5.1、–reporter :用来指定报告的格式


mocha --reporter spec

默认报告格式spec,我个人比较喜欢的网页格式是
mochawesome,
需要手动安装

npm i mochawesome --save-dev
./node_modules/.bin/mocha ./demo*/*.test.js -t 5000 --reporter mochawesome

-t 5000是因为我们测试用例中有一个异步执行过程,需要调高mocha的单元测试时间

5.2、–watch :参数用来监视指定的测试脚本。只要测试脚本有变化

5.3、–bail:参数指定只要有一个测试用例没有通过,就停止执行后面的测试用例

5.4、–grep:参数用来搜索单元测试用例的名称,然后运行符合搜索条件的测试用例,支持正则表达


mocha --grep /2/   ./demo*/*.test.js

5.5、–invert:参数表示只运行不符合条件的测试脚本,必须与–grep参数配合使用。
5.6 –recursive


一般如果运行mocha,会执行当前目录下的test目录的一级层级的所有js文件,但是test下的更多层级却没办法运行,这时就需要参数–recursive,这时test子目录下面所有的测试用例—-不管在哪一层—-都会执行。

六、配置文件mocha.opts的配置

每次我们运行测试用例的时候都需要写很长一段命令行,每次都一样,这样是不可取的,所以我们可以把这些配置维护到配置文件里面。

Mocha允许在test目录下面,放置配置文件mocha.opts,新建test文件夹,放置以下文件
api.test.js

let expect = require("chai").expect;
let request = require('supertest');

describe("api", () => {
  it('get baidu information', function (done) {
    request('https://www.baidu.com')
      .get('/')
      .expect(200)
      .expect('Content-Type', /html/)
      .end(function (err, res) {
        expect(res).to.be.an('object');
        done();
      });
  })
})

运行

 mocha --reporter tap 

然后在test下建mocha.opts

 // mocha.opts
 ```
 --reporter tap 
 ```

运行mocha,得到和上面一样的结果

七、mocha的生命钩子

mocha一共四个生命钩子
before():在该区块的所有测试用例之前执行
after():在该区块的所有测试用例之后执行
beforeEach():在每个单元测试前执行
和afterEach():在每个单元测试后执行

describe('hooks', function () {
    let i = 1
    let j = 1
    let m = 1
    let n = 1
    before(function () {
        console.log("the " + i++ + " start")
    });

    after(function () {
        console.log("the " + j++ + " end")
    });

    beforeEach(function () {
        console.log("the " + m++ + " start")
    });

    afterEach(function () {
        console.log("the " + n++ + " start")
    });

    it('one', function (done) {
        done()
    })
    it('two', function (done) {
        done()
    })
});
Mocha 入门:测试自动化综合指南 想象一下,一个测试框架能将编写测试的单调乏味转化为一门艺术——JavaScript 测试超级英雄 Mocha 应运而生。这个功能丰富的框架简化了 Node.js 和基于浏览器的应用程序的测试,提供灵活性、可自定义的测试设置、无缝的异步处理以及详细的报告。Mocha 支持多个断言库,使开发人员能够定制测试策略,同时确保软件可靠、无错误,使其成为轻松高效的测试体验的首选工具。 阅读详情

相关推荐

前端自动化测试mocha入门

前端测试 背景知识 1.      什么是Node.js:后端的js运行环境,基于c++和google的v8 2.      Web服务器, 应用服务器和http服务器的区别: web服务器是仅接受和返回http请求的;应用服务器是包含要处理的业务的;http服务器则是遵循了http协议的,一般前两种都有这个功能 3.      匿名函数,闭包特性使得他(node.js)适合:事件驱动、异

xz1458102234的专栏 3409

mocha——单元测试

是JavaScript的一种单元测试框架,既可以在浏览器环境下运行,也可以在Node.js环境下运行。 使用mocha,我们就只需要专注于编写单元测试本身,然后,让mocha去自动运行所有的测试,并给出测试结果。1.既可以测试简单的avaScript函数,又可以测试异步代码,因为异步是JavaScript的特性之一 ; 2.可以自动运行所有测试,也可以只运行特定的测试; 3.可以支持before. after、 beforeEach和afterEach来编写初始化代码。测试代码: sum.js 直接测试 t

mantou_riji的博客 1919

0009 用VisualStudio设计Max工具

这次分享个独家专利^)^:在Visual Studio中设计3dsMax脚本工具界面。 某次做原型设计时,需求改来改去,实在懒得搞GUI;虽然也尝试在Axure RP里画原型,但还是Visual Studio更顺手,也更容易测试一些交互,就直接在VS里做了。后来突发奇想,想实验一把能否直接用到Max里去,结果没想到成功了,效果还挺好。发现了新大陆,记录一下。   开始: 在VS里新建W...

whwst的专栏 769

mocha单元测试

mocha单元测试我是开发为什么要写单元测试呢mocha测试环境简单的测试用例 我是开发为什么要写单元测试呢 逼格高啊,没有单元测试的代码在github上是会被鄙视的 可以通过测试用例更快更好的理解代码 祖传代码 不敢改,改了这个功能,那个就不好使了 mocha测试环境 mocha是一个可以在node和浏览器环境运行的测试框架 mocha官网 安装mocha npm install moch...

宋大王的博客 804

从代码层面分析STM32 标准库和HAL库的差异

相当于每个设置都是独立的函数。HAL库将一段代码通过宏定义的方式封装成了一个函数,每个端口的时钟都单独的定义了一个名称,标准库是一个独立的函数,通过参数传递的方式来设置每个端口的时钟。这两个版本的函数本质上操作的还是寄存器,不过HAL库操作的只是BSRR寄存器,而标准库端口置1的时候操作的是BSRR寄存器,端口清0的时候操作的是BRR寄存器。标准库设置端口模式的时候,是在if语句中判断之后直接设置的,而HAL端口模式设置时,却使用了switch语句去设置,说明在HAL库中,端口模式和标准库中发生了改变。

HXYDJ的博客 2万+

AHB总线协议

1. 简介         AHB总线规范是AMBA总线规范的一部分,AMBA总线规范是ARM公司提出的总线规范,被大多数SoC设计采用,它规定了AHB (Advanced High-performance Bus)、ASB (Advanced System Bus)、APB (Advanced Peripheral Bus)。AHB用于高性能、高时钟频率的系统结构,典型的应用如ARM核与系统内

ivy_reny的专栏 8万+

测试框架Mocha的使用

在学习nodejs的过程中经常看到Mocha,学习后写了下面这篇文章。一.Mocha框架的简介Mocha是现在流行的JavaScript测试框架之一,在浏览器和node环境都可以使用。官方文档在https://mochajs.org/,一个测试框架需要大概包含以下内容: 1.用于写测试用例的宏,属性或者函数。 2.断定库,用于测试是否可以通过。 3.辅助库,如hook库(测试前后调用某些函数或

点点带你 1415

避坑指南:ANSYS流固耦合计算中System Coupling数据传递设置与常见报错解决

本文深入解析ANSYS Workbench中System Coupling模块在双向流固耦合(FSI)计算中的应用,详细讲解数据传递机制、典型报错解决方案及高阶调试技巧。通过实际案例展示如何优化耦合步长、处理大变形问题,并提升并行计算效率,帮助工程师有效规避常见技术陷阱。

weixin_29213525的博客 722

常用企业微信开源SCRM对比

1、猫信:MoChat企业微信SCRM系统 描述 内容 源码地址(介绍) https://gitee.com/mochat/mochat 演示地址 https://demo.mo.chat 演示账号/密码 13429803034/123456 环境准备 PHP >= 7.3 (推荐7.4版本) Swoole >= 4.5 Wxwork_finance_sdk(so扩展) Composer MySQL >= 5..

zhiyan1990的专栏 5016

Gamit 数据处理,相关的文件配置

一、处理前准备 1、在主文件夹内新建test项目文件,项目内新建brdc、igs和rinex三个文件夹,分别存放广播星历,精密星历几观测值文件,所用的命令分别为sh_get_nav、sh_get_orbits和sh_get_rinex (若文件为.Z,用gunzip命令解压,若仍为d,用命令sh_crx2rnx -f 命令解压为o文件) 2、进入test项目文件夹,链接tables,运行 sh_setup -yr 2015 -apr itrf08_com.apr 3、生成station.info文件。 将t

CodeDoraemon的博客 3375

实现单芯片2400bps 音频编解码方案

终于按照朋友的需求,帮他开发了一款单芯片集音频采集编码传送并接收解码播放功能的方案,交给快递公司邮寄给远在郑州的他.整个项目从开始定型到现在一个样机送出,整整花了1个月时间,感觉挺有成就感,挺有意思,工作是辛苦的,结果却是快乐的.现在将这中快乐的的心情与大家分享一下.    真个项目用一颗主控搞定,ARM9的,200KBytes 片内RAM,主频可以跑到300MHz,64pin LQFP封装

nyxsec的专栏 3682

mocha 的基本介绍&&expect风格断言库的基本语法

mocha 介绍 mocha 是一个功能丰富的javascript测试框架,可以运行在nodejs和浏览器环境,能够使异步测试变得简单有趣。mocha 串联运行测试,允许灵活和精确地报告结果,同时映射未捕获的异常用来纠正测试用例。 mocha 支持TDD/BDD 的 开发方式,结合 should.js/expect/chai/better-assert 断言库,能轻松构建各种风格的测试用例。 B...

weixin_33787529的博客 945

【GB28181】wvp-GB28181-pro部署安装教程(Ubuntu平台)

初始环境安装。

废人一枚的博客 5079

快速学习-mocha 简介与入门

mocha 简介 mocha 是 JavaScript 的一个单元测试框架,既可以在浏览器环境中运行,也可以在 node.js 环境下运行。我们只需要编写测试用例,mocha 会将测试自动运行并给出测试结果。 mocha 的主要特点有: 既可以测试简单的 JavaScript 函数,又可以测试异步代码;  可以自动运行所有测试,也可以只运行特定的测试; 可以支持 before、after、be...

逍遥云恋 3083

开源机器人库orocos KDL 学习笔记(二):Geometric

开源机器人库orocos KDL 学习笔记二:Geometric 如果按照上一篇搭建的VS2015 orocos KDL环境,会出现3个例程:geometry, chainiksolverpos_lma_demo, trajectory_example. 这一篇看一下geometry的例程。 在frames.hpp中,定义了这些class: - class Vector - class R

行者无疆的博客 6703

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

测试驱动开发(TDD)及测试框架Mocha.js入门学习

  组里马上要转变开发模式,由传统的开发模式(Developer开发,QA测试),转变为尝试TDD(Test-driven development,测试驱动开发)的开发模型。由此将不存在QA的角色,或者仅存很少的QA用于系统模块间的集成测试。   因此代码的测试与开发都将由开发者(Developer)来保证。   这就需要借助优秀测试框架的帮助,尤其是支持TDD开发模式的自动化测试框架更为重要...

weixin_34200628的博客 246

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

[自然语言处理-入门] 语音识别

[自然语言处理-入门] 语音识别

qq_54636039的博客 585

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

Puppeteer:被低估的自动化测试利器,功能太强大了!

第二行开始是示例脚本正文,describe()是指测试套件,单引号内的是套件名,it()是指测试用例,单引号内的是用例名,describe()内还可以嵌套describe() ,it()则是可以有并列多个意味着测试套件内有多个测试用例,如果describe()内只有一个it(),那套件名和用例名基本上可以写成一样。最后一行代码是断言语句。这里我新建了个名为browser.js的文件,里面自定义了2个不同尺寸大小的浏览器,一个是默认尺寸,一个是最大化尺寸,我可以在用例脚本中任意调用一个来使用。

okcross0的博客 1231

Web自动化测试,一定得掌握的 8 个核心知识点!

要进行浏览器端的自动化测试,掌握核心的 js 用法是必不可少的,本文提到的 8 个知识点,都会频繁用到。通过 let 关键字命名变量。通过 if 和三元表达式控制条件。普通的 function 形式函数定义。箭头函数也经常使用,有点类似匿名函数。回调函数在 js 当中非常常见,但是会遇到回调地狱的问题。Promise 是解决回调地狱的有效手段,promise 和 then 的用法会经常碰到。Async / Await 是另一种更优雅的使用 promise 的方式,更推荐使用。

2401_84563220的博客 719

如何快速掌握测试驱动开发TDD:全栈Web开发者的终极指南

测试驱动开发TDD是现代软件开发中至关重要的实践方法,它能显著提高代码质量和开发效率。Become-A-Full-Stack-Web-Developer项目提供了丰富的免费学习资源,帮助开发者从零开始掌握全栈Web开发技能,其中也包括测试驱动开发的最佳实践。🚀 ## 什么是测试驱动开发TDD? **测试驱动开发TDD**是一种软件开发方法,其核心思想是在编写实际功能代码之前先编写测试用例。这

gitblog_00720的博客 1036

联邦学习:MOCHA框架

MOCHA主要是为了解决联邦学习中的系统难题和统计难题而提出的联邦学习框架。 MTL(多任务学习)通过学习每个节点的独立模型,利用任意的凸损失函数为每个节点训练出独立的权重向量。并且考虑节点模型间的相关性来解决联邦环境中的统计难题,并且提升样本容量,但是目前的MTL难以解决系统难题。 在集中环境分布式多任务训练模型CoCoA的基础上进行改进,本文提出联邦多任务学习框架MOCHA,为模型参数W开发有效的分布式优化更新方法。...

weixin_51306020的博客 3607

NodeJS-Learning进阶之路:从初学者到专家的完整成长路径

NodeJS-Learning是一个全面的Node.js学习资源集合,包含精选的博客文章、教程、视频、书籍、框架和工具等,帮助开发者系统学习Node.js并紧跟技术潮流。无论你是完全没有编程基础的新手,还是有一定经验想提升技能的开发者,这个项目都能为你提供清晰的学习路径和丰富的学习资源。 ## 🚀 为什么选择Node.js? Node.js作为基于Chrome V8引擎的JavaScript

gitblog_01060的博客 960

NodeJS-Learning社区资源:如何加入全球Node.js开发者网络

NodeJS-Learning是一个精心策划的Node.js学习资源集合,包含博客文章、教程、视频、书籍、框架和工具等内容,帮助开发者轻松学习Node.js并紧跟技术潮流。通过本文,你将了解如何利用这些资源快速融入全球Node.js开发者社区,获取支持和最新动态。 ## 为什么选择NodeJS-Learning社区资源? NodeJS-Learning不仅仅是资源列表,更是连接全球Node.j

gitblog_00022的博客 469

软件测试-mocha入门

软件测试-mocha入门 什么是TDD: TDD:Test driven devlement,测试驱动开发,是敏捷开发中的一项核心实践和技术,也是一种设计方法论。 TDD的原理是在开发功能代码之前,先编写单元测试用例代码,测试代码确定需要编写什么产品代码。 什么是mocha: mocha是JavaScript的一种单元测试框架,既可以在浏览器环境下运行,也可以在Node.js环境下运行。 安装mocha: 1.创建一个工程。 2.运行: #初始化 npm init #安装mocha npm i mo

Meetsummer的博客 1315
上一篇: 欢迎使用优快云-markdown编辑器
TimLiu1
博客等级 码龄11年 2粉丝 2原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值