mocha断言测试

1. npm install -g mocha
2. npm install -g chai
*Error: Cannot find module 'chai'*
3,4是安装在项目内的
3. npm install --save-dev chai
4. npm install --save-dev mochawesome
mocha --reporter mochawesome漂亮模板啦
>测试结果报告就在[mochaawesome-reports
](https://github.com/ruanyf/mocha-demos/blob/master/demo02/mochawesome-reports)子目录生成

[测试框架 Mocha 实例教程](http://www.ruanyifeng.com/blog/2015/12/a-mocha-tutorial-of-examples.html)
[mochademo](https://github.com/ruanyf/mocha-demos)
  • 测试脚本与所要测试的源码脚本同名,但是后缀名为.test.js(表示测试)或者.spec.js(表示规格)

  • describe块称为"测试套件"(test suite),表示一组相关的测试。它是一个函数,第一个参数是测试套件的名称("加法函数的测试"),第二个参数是一个实际执行的函数。

  • it块称为"测试用例"(test case),表示一个单独的测试,是测试的最小单位。它也是一个函数,第一个参数是测试用例的名称("1 加 1 应该等于 2"),第二个参数是一个实际执行的函数。

  • 所有的测试用例(it块)都应该含有一句或多句的断言。它是编写测试用例的关键。断言功能由断言库来实现,Mocha本身不带断言库,所以必须先引入断言库。
    var expect = require('chai').expect;
    expect断言的写法都是一样的。头部是expect方法,尾部是断言方法,比如equal、a/an、ok、match等。两者之间使用to或to.be连接。

  • mocha命令后面紧跟测试脚本的路径和文件名,可以指定多个测试脚本。
    一般mocha直接运行test文件夹里*.test.js文件,如还有目录下有该类文件需要运行则-- recursive遍历下

执行的时候还可以单独指定目录以及shell通配符
$ mocha spec/{my,awesome}.js
$ mocha test/unit/.js
$ mocha test/{,
/}.{js,jsx}
test目录下面任何子目录中、文件后缀名为js或jsx的测试脚本。注意,Node的通配符要放在单引号之中,否则星号()会先被Shell解释。
$ mocha 'test/
/.@(js|jsx)'#node通配符

mocha --watch
只要测试脚本有变化,就会自动运行Mocha

mocha --bail
只要有一个测试用例没有通过,就停止执行后面的测试用例。这对[持续集成](http://www.ruanyifeng.com/blog/2015/09/continuous-integration.html)很有用

- - -这里类似下面的only/skip用例管理啦???

mocha --grep "1 加 1"  (-g)
用于搜索测试用例的名称(即it块的第一个参数),然后只执行匹配的测试用例

mocha --grep "1 加 1" --invert  (-i)
只运行不符合条件的测试脚本,必须与--grep参数配合使用


比较好玩的几点


  1. mocha.opts配置test目录下加上如下命令行参数
    --reporter tap
    --recursive
    --growl

等价于mocha --recursive --reporter tap --growl

如果测试用例不是存放在test子目录,可以在mocha.opts写入以下内容
运行server-tests目录及其子目录之中的测试脚本
server-tests
--recursive

  1. 执行demo5关于require的时候提示
    报错severagent

npm install superagent cheerio --save

  1. describe块之中,提供测试用例的四个钩子:before()、after()、beforeEach()和afterEach()。它们会在指定时间执行。

  2. mocha -t 10000 async.test.js
    get请求

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

describe('async.test.js - 异步测试', function() {
  it('异步请求应该返回一个对象', function(done){
    request
      .get('https://api.github.com')
      .end(function(err, res){
        expect(res).to.be.an('object');
        done();
      });
  });
});

Mocha内置对Promise的支持,允许直接返回Promise,等到它的状态改变,再执行断言,而不用显式调用done方法
promise.test.js

var fetch = require('node-fetch');
var expect = require('chai').expect;

describe('promise.test.js - 异步测试', function() {
  it('异步请求应该返回一个对象', function() {
    return fetch('https://api.github.com')
      .then(function(res) {
        return res.json();
      }).then(function(json) {
        expect(json).to.be.an('object');
      });
  });
});
  1. describe块之中,提供测试用例的四个钩子:before()、after()、beforeEach()和afterEach()。它们会在指定时间执行.

技能点燃,类似unittest里的setUp/tearDown,类似pytest里的setUp/tearDown和setUpClass/tearDownClass
--demo6里的栗子

  1. *测试用例管理only+skip
    describe块和it块都允许调用only方法,表示只运行某个测试套件或测试用例只运行特定的几个
    skip是跳过不运行,好吧都是通用的命令哇

  2. *浏览器测试

  • mocha init demo08
  • add.js
  • chai.js
  • index.html里加上它3js
<script>
  mocha.setup('bdd');
</script>
<script src="add.js"></script>
<script src="http://chaijs.com/chai.js"></script>
<script src="tests.js"></script>
<script>
  mocha.run();
</script>
  • tests.js
  1. 生成规格文件demo09
  • markdown格式: mocha --recursive -R markdown > spec.md
  • html格式: mocha --recursive -R doc > spec.html
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,732评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,496评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,264评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,807评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,806评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,675评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,029评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,683评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,704评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,666评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,773评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,413评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,016评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,204评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,083评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,503评论 2 343

推荐阅读更多精彩内容