美文网首页
Js测试框架Mocha使用

Js测试框架Mocha使用

作者: 醉饮满天星 | 来源:发表于2019-06-27 18:48 被阅读0次

Mocha发信“摩卡”,是现在最流行的JavaScript测试框架之一。
测试框架:就是一套测试工具、解决方案,有自己的流程和规范。
除了Mocha以外,类似的测试框架还有Jasmine、Karma、Tape等,也很值得学习。

安装

在全局和工程里面安装mocha

npm install --save-dev mocha
npm install mocha -g

有时候mocha运行要依赖于项目node-modules里面的库,这时候使用

npx mocha ...

测试脚本写法

var expect = require('chai').expect;
describe('加法函数的测试', function() {
  it('1 加 1 应该等于 2', function() {
    expect(add(1, 1)).to.be.equal(2);
  });
});

describe块是一个测试套件(test suite),表示一组相关的测试;
it(test case)是一个测试用例。
一般测试文件命名为*.test.js

断言

用来断言结果和预期是否匹配,mocha本身没有断言,可以使用第三方断言库。
断言失败会抛出一个错误,只要不抛出错误,这个测试就通过。
chai的expect风格断言库很接近自然语言风格,例如:

// 相等或不相等
expect(4 + 5).to.be.equal(9);
expect(4 + 5).to.be.not.equal(10);
expect(foo).to.be.deep.equal({ bar: 'baz' });

// 布尔值为true
expect('everthing').to.be.ok;
expect(false).to.not.be.ok;

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

// include
expect([1,2,3]).to.include(2);
expect('foobar').to.contain('foo');
expect({ foo: 'bar', hello: 'universe' }).to.include.keys('foo');

// empty
expect([]).to.be.empty;
expect('').to.be.empty;
expect({}).to.be.empty;

// match
expect('foobar').to.match(/^foo/);

Mocha基本用法

命令

mocha --help
mocha 后面跟文件、路径(默认当前路径的test目录)
--watch 监视测试文件改动,有改动后重新运行测试。(vs可以先把改动写入缓存,保存后flush到工作区)
--grep 管道筛选
--recursive 递归子级目录文件

配置文件mocha.opts

Mocha允许在test目录下面,放置配置文件mocha.opts,把命令行参数写在里面。

server-tests
--recursive

这样每次运行会自动附件里面的参数。

ES6 测试

  1. 用babel编译。npm install babel-core babel-preset-es2015 --save-dev
  2. 运行测试。
//.babelrc
{
    "presents":[ "es2015" ]
}
mpx mocha --compilers js:babel-core/register

--compilers后面紧跟一个冒号分割的字符串,左边是文件后缀名,右边是处理这类文件模块名。
CoffeeScript也很有趣:
mocha --compilers coffee:coffee-script/register

注意,Babel默认不会对Iterator、Generator、Promise、Map、Set等全局对象,以及一些全局对象的方法(比如Object.assign)转码。如果你想要对这些对象转码,就要安装babel-polyfill。
npm install babel-polyfill --save
然后,在你的脚本头部加上一行:
npm install babel-polyfill --save

异步测试

mocha对异步测试通过情况分两种:

  • 用户显示调用了done方法,告诉mocha异步完成;
it('测试应该5000毫秒后结束', function(done) {
  var x = true;
  var f = function() {
    x = false;
    expect(x).to.be.not.ok;
    done(); // 通知Mocha测试结束
  };
  setTimeout(f, 4000);
});

  • mocha内置支持promise,允许直接返回promise,等它状态改变后执行断言,而不需要显式调用done。
it('异步请求应该返回一个对象', function() {
  return fetch('https://api.github.com')
    .then(function(res) {
      return res.json();
    }).then(function(json) {
      expect(json).to.be.an('object');
    });
});

mocha对每个异步测试等待时间默认2000毫秒,如果2000之内done方法或者promise状态没有完成变化,则超时。可设置等待时间:
mocha -t 5000 timeout.test.js

测试用例钩子

describe('hooks', function() {

  before(function() {
    // 在本区块的所有测试用例之前执行
  });

  after(function() {
    // 在本区块的所有测试用例之后执行
  });

  beforeEach(function() {
    // 在本区块的每个测试用例之前执行
  });

  afterEach(function() {
    // 在本区块的每个测试用例之后执行
  });

  // test cases
});

测试用例管理

有些测试用例是否运行,不需要注释,describe和it都可以用skip或者only。

it.only('1 加 1 应该等于 2', function() {
  expect(add(1, 1)).to.be.equal(2);
});

it('任何数加0应该等于自身', function() {
  expect(add(1, 0)).to.be.equal(1);
});

只要有it方法被调用,mocha只会执行only标记的方法。
mocha应该it方法是将执行函数入栈,经过筛选执行,而非立即执行。

相关文章

  • Js测试框架Mocha使用

    Mocha发信“摩卡”,是现在最流行的JavaScript测试框架之一。测试框架:就是一套测试工具、解决方案,有自...

  • 学习测试框架Mocha

    学习测试框架Mocha Mocha 是javascript测试框架之一,可以在浏览器和Node环境下使用,除了Mo...

  • JavaScript测试框架调研

    常用的js测试框架: Mocha:https://mochajs.org/ Jasmine:https://jas...

  • Egg.js 单元测试入门

    官方推荐测试框架:Mocha(Mocha中文网) 官方推荐断言库:power-assert Egg.js 中已经内...

  • 前端小知识点综合大全

    小知识点 node接口模拟返回 js接口模拟数据 mockjs mocha js 测试框架--教程 git 教程 ...

  • Node项目如何写覆盖率测试

    通常,我们的测试框架会使用mocha package.json 借助mocha,我们可以用nyc来进行覆盖率测试 ...

  • 使用mocha+debug调试代码

    0.测试框架是mocha 1.使用如下命令: cross-env NODE_ENV=test mocha --de...

  • 第一周预习

    Mocha Mocha 是用于 Javascript 测试的框架。浏览器和 node 环境都可以使用。安装npm ...

  • 用 JavaScript 编写测试脚本

    用 JavaScript 编写测试脚本 Truffle使用 Mocha 测试框架和 Chai 断言,为编写 Jav...

  • 小知识点集汇一

    小知识点集汇一 小知识点 node接口模拟返回 js接口模拟数据 mockjs mocha js 测试框架--教程...

网友评论

      本文标题:Js测试框架Mocha使用

      本文链接:https://www.haomeiwen.com/subject/vphdcctx.html