Mocha

Mocha 是具有丰富特性的 JavaScript 测试框架,可以运行在 Node.js 和浏览器中,使得异步测试更简单更有趣。Mocha 可以持续运行测试,支持灵活又准确的报告,当映射到未捕获异常时转到正确的测试示例。

Sinon 是一个独立的 JavaScript 测试spy, stub, mock库,没有依赖任何单元测试框架工程。

assert模块

搬运自

http://javascript.ruanyifeng.com/nodejs/assert.html#toc2


var assert = require('assert');
//assert方法接受两个参数,当第一个参数对应的布尔值为true时,不会有任何提示,返回undefined。当第一个参数对应的布尔值为false时,会抛出一个错误,该错误的提示信息就是第二个参数设定的字符串。
assert.equal(Math.max(1,100),100, '预期相等'); // 以下三句效果相同
assert(Math.max(1,100) == 100, '预期等于100');
assert.ok(Math.max(1,100) == 100, '预期等于100');
assert.equal(Math.max(1,100), 100, '预期等于100'); //预期代码会抛出一个错误
//如果没有抛出错误反而认为是有问题的
assert.throws(
function() {
if(add(1,2) == 3){
throw new Error('add result wrong');
}
},
/add/,
'add有问题'
);

mocha 第一步

mocha需要全局安装 一会儿我们需要用到mocha命令

之后可以通过mocha xxx.js 来执行测试

或者把待测试js都放在test文件夹中

之后在和test的同级目录运行mocha命令(推荐)

一个简单的mocha例子

var assert = require("assert");

//测试Array中的indexOf

describe('Array', function() {
describe('#indexOf()', function() {
//具体的测试语句会放在it的回调函数里
//
it('should return -1 when the value is not present', function() {
assert.equal(-1, [1, 2, 3].indexOf(5));
assert.equal(-1, [1, 2, 3].indexOf(0));
})
})

describe (moduleName, testDetails)

describe可以嵌套 module_name 是可以随便取的

it (info, function)

具体的测试语句会放在it的回调函数里,一般来说info字符串会写期望的正确输出的简要一句话文字说明

当该it block内的test failed的时候控制台就会把详细信息打印出来

异步测试

参考

https://lostechies.com/derickbailey/2012/08/17/asynchronous-unit-tests-with-mocha-promises-and-winjs/

异步的测试有什么不同呢? 如果你在测试异步的代码 你并不知道异步的代码什么时候完成

你天真的会以为是这样 (这里使用的Chai来作断言)

describe("a test", function(){
var foo = false;
beforeEach(function(){
setTimeout(function(){
foo = true;
}, 50);
}); it("should pass", function(){
expect(foo).equals(true);
}); });

实际上应该这样

describe("a test", function(){
var foo = false;
beforeEach(function(done){
setTimeout(function(){
foo = true;
done();
}, 500);
});
it("should pass", function(){
expect(foo).equals(true);
});
});

使用Promise的异步

describe("a test", function(){
var foo = false;
beforeEach(function(done){
var promise = new Promise(function(resolve){
resolve(true);
});
promise.then(function(value){
// get the value from the completed promise
foo = value;
// complete the async beforeEach
done();
});
});
it("should pass", function(){
expect(foo).equals(true);
});
});

Mocha的Assertions

Mocha官网上关于mocha可用的assertion列举了很多断言库

  • should.js BDD风格

    API
var should = require('should');
should('abc').be.a.String(); var a = { a: 10 }, b = Object.create(null);
b.a = 10; a.should.be.eql(b);
  • expect.js based on should.js
expect(window.r).to.be(undefined);
expect({ a: 'b' }).to.eql({ a: 'b' })
expect(5).to.be.a('number');
expect([]).to.be.an('array');
expect(window).not.to.be.an(Image);

demos

  • Chai

    Chai 是一个针对 Node.js 和浏览器的行为驱动测试和测试驱动测试的断言库,可与任何 JavaScript 测试框架集成。

    它拥有 should expect assert 三种模式

    访问Official Site即可看到

比如expect

var expect = chai.expect;

expect(foo).to.be.a('string');
expect(foo).to.equal('bar');
expect(foo).to.have.length(3);
expect(tea).to.have.property('flavors').with.length(3);
  • better-assert
  assert('tobi' == user.name);
assert('number' == typeof user.age);

Mocha 从0开始的更多相关文章

  1. Mocha的单元测试实战

    Mocha Mocha是一个测试框架,为JS应用添加测试.使用见:mochajs. Mocha结合Nodejs实战 ontstair.js 这里我们使用自定义模块:ontstair.js,代码如下. ...

  2. Mocha测试框架,保证代码质量

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

  3. mocha.js

    mocha 如果你听说过“测试驱动开发”(TDD:Test-Driven Development),单元测试就不陌生. 单元测试是用来对一个模块.一个函数或者一个类来进行正确性检验的测试工作. 比如对 ...

  4. mocha、chai和supertest单元测试

    mocha单元测试 1. 因为有时候在代码中加了新的东西需要反复测试接口 或者 别人要求 重新跑接口非常的繁琐 2. 所有我们需要一个帮我们重复测试的东西  那就是mocha 3. 先下载 一定不要全 ...

  5. dependencies 和 devDependencies

    npm install node_module –save自动更新dependencies字段值 npm install node_module –save-dev自动更新devDependencie ...

  6. [Node.js] Configuring npm package.json scripts

    With a node package manager's (npm) package.json script property, you can preconfigure common tasks ...

  7. ububru下 redmine安装教程

    1.安装之前确认你已经安装好了mysql 2.连接mysql创建数据库 mysql -u root –p CREATE DATABASE redmine CHARACTER SET utf8; CRE ...

  8. nodeJS中的包

    前面的话 Node组织了自身的核心模块,也使得第三方文件模块可以有序地编写和使用.但是在第三方模块中,模块与模块之间仍然是散列在各地的,相互之间不能直接引用.而在模块之外,包和NPM则是将模块联系起来 ...

  9. headfirst设计模式(3)—装饰者模式

    序 好久没写设计模式了,自从写了两篇之后,就放弃治疗了,主要还是工作太忙了啊(借口,都是借口),过完年以后一直填坑,填了好几个月,总算是稳定下来了,可以打打酱油了. 为什么又重新开始写设计模式呢?学习 ...

随机推荐

  1. EF6 Codefirst+MySql 数据库迁移

    简介 项目使用MSSql作为数据库,但是因为SQL服务器贵那么一点,并发连接差那么一点,要把数据迁移到MySQL,顺带迁移过程以及问题. 环境 Visual Studio 2013 MySQL 5.7 ...

  2. 一个周末掌握IT前沿技术之node.js篇

    一个周末掌握IT前沿技术之node.js篇 http://ittechnical.sinaapp.com/node-js-and-restful-api/ NodeJS入门  http://www.n ...

  3. HDU 1045(Fire Net)题解

    以防万一,题目原文和链接均附在文末.那么先是题目分析: [一句话题意] 给定大小的棋盘中部分格子存在可以阻止互相攻击的墙,问棋盘中可以放置最多多少个可以横纵攻击炮塔. [题目分析] 这题本来在搜索专题 ...

  4. DOS 根据用户输入执行指令判断IF

    @echo off set /p op="输入指令:" if "%op%" == "1" ( echo 你输入了指令1 ) if " ...

  5. easyui的datagrid删除一条记录后更新出问题

    1.问题 如果先删除一条记录,然后不选中一条记录,去更新一条,默认是有选中的记录的,就是被删除的那条记录. 2.解决方法 $("#dg").datagrid('uncheckAll ...

  6. 获得easyUi dialog 对话框title的属性值

    <div id="dlg" class="easyui-dialog" title="Toolbar and Buttons" sty ...

  7. IC卡

    本词条由“科普中国”百科科学词条编写与应用工作项目 审核 . IC卡 (Integrated Circuit Card,集成电路卡),也称智能卡(Smart card).智慧卡(Intelligent ...

  8. Qt新建线程的方法(四种办法,很详细,有截图)

    看了不少Qt线程的东西,下面总结一下Qt新建一个线程的方法. 一.继承QThread 继承QThread,这应该是最常用的方法了.我们可以通过重写虚函数void QThread::run ()实现我们 ...

  9. Android第三方应用分享图文到微信朋友圈 & 微信回调通知分享状态

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAWQAAAKUCAIAAAC8A9XzAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWX ...

  10. 【原】win7下调整分区

    由于装系统时硬盘分区极度不合理,导致现在装一些比较大的开发软件根本不能装,但是又不想重装系统调整分区,而且还不想让已有的文件受到一点伤害,毕竟数据无价啊.几番搜索后,发现了一款比较好用的硬盘管理软件  ...