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. Tera Term——访问linux的ssh工具

    个人感觉他是一款免费的并且比较好用的ssh工具,下载地址: http://logmett.com/index.php?/products/teraterm.html 下载之后一路下一步就可以了.可以选 ...

  2. 清除float常用方法(:after和clear:both)

    参考网址:http://jingyan.baidu.com/article/c74d60006bea410f6a595d17.html .clearfix:after{ .....}  和 .clea ...

  3. linux 中ls命令函数

    #include<stdio.h>#include<sys/types.h>#include<sys/stat.h>#include<dirent.h> ...

  4. 实现mysql的分组排名问题

    如下图所示的表结构,mysql中查出按照相同class的成员按照年龄排序. sql语句实现如下: SELECT id,name,age,rank FROM ( ,) AS rank,@pa:=ff.c ...

  5. JS判断是否在微信浏览器打开

    if (browser.versions.mobile) {//判断是否是移动设备打开.browser代码在下面 var ua = navigator.userAgent.toLowerCase(); ...

  6. 用Cookie和Session实现用户登录 函数

    由于网页是一种无状态的连接程序,你无法得知用户的浏览状态,必须通过Cookie或Session记录用户的有关信息. Cookie: 是一种在远程浏览器端储存数据并以此来跟踪和识别用户的机制. PHP透 ...

  7. 在共享DLL中使用MFC 和在静态库中使用MFC的区别

    使用VS2008,在项目属性中有一项MFC的使用,有三种设置: 1.使用标准Windows库 2.在共享DLL中使用MFC 3.在静态库中使用MFC          第一种顾名思义.        ...

  8. 借助bootstrap框架模仿airbnb写的网页

    View HTML .nav a { color: #5a5a5a; font-size: 11px; font-weight: bold; padding: 14px 10px; text-tran ...

  9. paip.c++ qt 外部dll共享库的导入以及引用

    paip.c++ qt 外部dll共享库的导入以及引用 作者Attilax ,  EMAIL:1466519819@qq.com  来源:attilax的专栏 地址:http://blog.csdn. ...

  10. android 计时器,倒计时

    自己定义CountDownTimer /** * 计时器 * @author Administrator * */ class TimeCount extends CountDownTimer{ pu ...