Mocha入门

官网地址

一、Getting Started

  1. 初始化:npm init
PS G:\vuejs\vue2_practice\mocha> npm init
This utility will walk you through creating a package.json file.
It only covers the most common items, and tries to guess sensible defaults.

See `npm help json` for definitive documentation on these fields
and exactly what they do.

Use `npm install <pkg>` afterwards to install a package and
save it as a dependency in the package.json file.

Press ^C at any time to quit.
package name: (mocha) mocha-demos
version: (1.0.0)
description: mocha demos
entry point: (index.js)
test command:
git repository:
keywords: mocha
author: Beiyu
license: (ISC) MIT
About to write to G:\vuejs\vue2_practice\mocha\package.json:

{
  "name": "mocha-demos",
  "version": "1.0.0",
  "description": "mocha demos",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [
    "mocha"
  ],
  "author": "Beiyu",
  "license": "MIT"
}


Is this OK? (yes)
  1. 安装mocha:npm i mocha --save-dev
PS G:\vuejs\vue2_practice\mocha> npm i mocha --save-dev
npm notice created a lockfile as package-lock.json. You should commit this file.
npm WARN mocha-demos@1.0.0 No repository field.

+ mocha@5.2.0
added 24 packages from 436 contributors in 33.405s
  1. mkdir test
PS G:\vuejs\vue2_practice\mocha> mkdir test


    目录: G:\vuejs\vue2_practice\mocha


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
d-----       2018-12-16      9:46                test
  1. new-item test/test.js -type file
PS G:\vuejs\vue2_practice\mocha> new-item test/test.js -type file


    目录: G:\vuejs\vue2_practice\mocha\test


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----       2018-12-16      9:46              0 test.js
  1. test/test.js中编辑
let assert = require('assert');
describe('Array', () => {
  describe('#indexOf()', () => {
    it('should return -1 when the value is not present', () => {
      assert.equal([1,2,3].indexOf(4), -1);
    })
  })
})
  1. 运行$ mochamocha test$ mocha test/test.js
PS G:\vuejs\vue2_practice\mocha> mocha


  Array
    #indexOf()
      √ should return -1 when the value is not present


  1 passing (5ms)
  1. package.json中设置一个测试脚本(Set up a test script in package.json)
"scripts": {
  "test": "mocha"
}
  1. 然后运行(Then run tests with):$ npm test
PS G:\vuejs\vue2_practice\mocha> npm test

> mocha-demos@1.0.0 test G:\vuejs\vue2_practice\mocha
> mocha



  Array
    #indexOf()
      √ should return -1 when the value is not present


  1 passing (6ms)

二、Run Cycle Overview(运行循环概述)

关于Mocha的组件执行顺序的简要概述。值得注意的是,所有钩子,描述和回调都按照它们被定义的顺序运行(即在文件中找到)。

【A brief outline on the order Mocha’s components are executed. Worth noting that all hooks, describe and it callbacks are run in the order they are defined (i.e. found in the file).】

run 'mocha spec.js'
|
spawn child process
|
|--------------> inside child process
  process and apply options
  |
  run spec file/s
  |
  |--------------> per spec file
    suite callbacks (e.g., 'describe')
    |
    'before' root-level pre-hook
    |
    'before' pre-hook
    |
    |--------------> per test
      'beforeEach' root-level pre-hook
      |
      'beforeEach' pre-hook
      |
      test callbacks (e.g., 'it')
      |
      'afterEach' post-hook
      |
      'afterEach' root-level post-hook
    |<-------------- per test end
    |
    'after' post-hook
    |
    'after' root-level post-hooks
  |<-------------- per spec file end
|<-------------- inside child process end

三、Detects Multiple Calls to DONE()(检测多次回调)

如果使用基于回调的异步测试,如果多次调用done(),Mocha将抛出错误。这对于捕获意外的双重回调非常方便。

【If you use callback-based async tests, Mocha will throw an error if done() is called multiple times. This is handy for catching accidental double callbacks.】

新建test/multi-calls.js

let assert = require('assert')
describe('Multiple calls', () => {
  it('should throw an error', (done) => {
    setImmediate(done)
    setImmediate(done)
  })
})
PS G:\vuejs\vue2_practice\mocha> mocha test/multi-calls.js


  Multiple calls
    √ should throw an error
    1) should throw an error


  1 passing (6ms)
  1 failing

  1) Multiple calls
       should throw an error:
     Error: done() called multiple times
multiple calls throw error

四、Assertions(断言)

Mocha允许您使用任何您想要的断言库。在上面的例子中,我们使用Node.js的内置断言模块 - 但一般来说,如果它抛出一个Error,它就会工作!这意味着您可以使用以下库:

Mocha allows you to use any assertion library you wish. In the above example, we’re using Node.js’ built-in assert module–but generally, if it throws an Error, it will work! This means you can use libraries such as:

  • should.js - BDD style shown throughout these docs
  • expect.js - expect() style assertions
  • chai - expect(), assert() and should-style assertions
  • better-assert - C-style self-documenting assert()
  • unexpected - “the extensible BDD assertion toolkit”

五、Asynchronous Code(异步代码)

用Mocha测试异步代码再简单不过了!只要在测试完成时调用回调即可。通过向it()添加回调(通常称为done), Mocha将知道它应该等待这个函数被调用来完成测试。该回调既接受错误实例(或其子类),也接受falsy值;否则将导致测试失败。

Testing asynchronous code with Mocha could not be simpler! Simply invoke the callback when your test is complete. By adding a callback (usually named done) to it(), Mocha will know that it should wait for this function to be called to complete the test. This callback accepts both an Error instance (or subclass thereof) or a falsy value; anything else will cause a failed test.

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

推荐阅读更多精彩内容

  • mocha诞生于2011年,是现在最流行的JavaScript测试框架之一,在浏览器和node环境都可以使用 安装...
    测试猴阅读 3,912评论 0 2
  • 作为一个项目而言,单元测试应该是必备的一部分,也是最容易被大家忽略的一部分,这篇文章就介绍一下mocha这个测试框...
    天空_3a82阅读 644评论 0 0
  • rljs by sennchi Timeline of History Part One The Cognitiv...
    sennchi阅读 7,258评论 0 10
  • 目前虫网名下的字幕组已经做出来两个成果啦~ 一个是BBC一个讲哥本哈根的纪录片,另一个是2015年那部讲拉马努金的...
    111避难所阅读 286评论 0 0
  • 狂猿阅读 5,409评论 0 0