Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

初探前端单元测试 #1

Open
CJianYu opened this issue Jun 4, 2018 · 0 comments
Open

初探前端单元测试 #1

CJianYu opened this issue Jun 4, 2018 · 0 comments

Comments

@CJianYu
Copy link
Owner

CJianYu commented Jun 4, 2018

单元测试类别

单元测试分为TDD(测试驱动开发)和BDD(行为驱动开发),这两种有什么区别呢?
顾名思义,TDD 的开发模式是先写测试,通过测试驱动开发,开发流程如下:
image
而BDD则是通过基于需求文档先行开发,按预期行为进行构建功能。BDD的写法更语义化.
行为驱动的创始人本质上希望产品能通过描述用户行为路径,来自动生成测试用例,从而回归开发代码,BDD希望产品以及业务人员能参与到开发流程当中,从而减轻开发者或测试写测试用例的成本。
对比两者代码如下:

// TDD
suite('Array', function() {
  setup(function() {
  });

  test('equal -1 when index beyond array length', function() {
    assert.equal(-1, [1,2,3].indexOf(4));
  });
});

// BDD
describe('Array', function() {
  before(function() {
  });

  it('should return -1 when no such index', function() {
    [1,2,3].indexOf(4).should.equal(-1);
  });
});

测试框架

运用框架的目的是帮助我们提高效率,避免将精力花费在无关紧要的事情上。测试框架,也就是运行测试的工具。目前比较流行的是jasmine以及Mocha。

mocha的用法

安装

在命令行执行npm install --global mocha全局安装
或者在项目中单独使用:npm install --save-dev mocha

基本使用

看如下官网中的例子,每个测试脚本应该包含一个或多个describe(测试套件),每个describe里面应有一个或多个it(测试用例),值得注意的是,测试脚本的命名应该与要测试的模块同名,但后缀名必须是.test.js

var assert = require('assert');
describe('Array', function() {
  describe('#indexOf()', function() {
    it('should return -1 when the value is not present', function() {
      assert.equal([1,2,3].indexOf(4), -1);
    });
  });
});

掌握常用的命令:
运行脚本mocha testFile.test.js
运行多个脚本mocha test1.test.js test2.test.js test3.test.js
监听脚本变化,自动运行mocha: mocha --watch
只要有个脚本不过就不再执行下面的脚本: mocha --bail
执行用名字搜索的测试用例: mocha --grep '用例名'
只运行不符合条件的测试用例:mocha --grep '用例名' --invert

断言库

Mocha为了保证自身的灵活性,不提供断言API,所以你可以选择各种你喜欢的断言库。Node.js 核心库 Assert、should.js、expect.js、chai是几个常用的断言库。下面是几个常用的断言库的语法对比:

// assert
assert.equal(value, 1);

// should
value.should.equal(1);
value.should.be.a.Number();

// expect
expect(1).to.equal(1);
expect(value).to.be.a('number');

可以看到should.js的语义化特别好,就像是读英文。

Q:怎么选型?
A:不根据业务需求的选型都是耍流氓,自己的产品是什么,场景是什么,技术优缺点是什么,综合判断再选。不要轻易说选什么技术。

参考链接

TDD和BDD的区别:http://ilucas.me/2016/03/07/difference-between-tdd-and-bdd/
mocha教程:http://www.ruanyifeng.com/blog/2015/12/a-mocha-tutorial-of-examples.html
了解karma:http://taobaofed.org/blog/2016/01/08/karma-origin/
持续集成服务 Travis CI 教程:http://www.ruanyifeng.com/blog/2017/12/travis_ci_tutorial.html

@CJianYu CJianYu changed the title this is a test 初探前端性能测试 Nov 3, 2018
@CJianYu CJianYu changed the title 初探前端性能测试 初探前端单元测试 Nov 3, 2018
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant