参考

优质
小牛编辑
183浏览
2023-12-01

ECMAScript 6 入门
ESlint是一个javascript代码审查框架。

Testem

A test runner that makes Javascript unit testing fun.
创建一个testem的测试目录,然后安装testem:

$ cd /opt && mkdir testem && cd /opt/testem
$ npm install testem -g
$ testem

屏幕会提示testem已经运行,监听端口是7357。这时,testem已经准备好,等待接受浏览器的访问。屏幕显示:

waiting for browsers...

用浏览器访问地址http://c7302.ambari.apache.org:7357。这时屏幕提示:

chrome 61.0
0/0 √

这表明测试已经完成,只是工作目录下没有任何.js文件,所以测试数量是0。 现在打开另外的终端窗口,进入/opt/testem目录,在目录下编辑一个hello_spec.js的文件,内容是:

describe('hello', function(){
  it('should say hello', function(){
    expect(hello()).toBe('hello world');
  });
});

这是一个Jasmine格式的测试脚本。Testem会自动加载工作目录下的js文件。所以屏幕显示:

chrome 61.0
0/1 ×

hello returns "hello world"
  × ReferenceError: hello is not defined

这说明已经运行了测试,但被测试的对象hello没有定义。现在编辑一个hello.js文件,内容是:

function hello(){
  return "hello world";
}

Testem又一次自动检测到了目录下的文件变化,并运行了测试。这次显示:

chrome 61.0
1/1 √

√ 1 tests complete.

QUnit

QUnit: A JavaScript Unit Testing framework. 下面是快速入门。

在浏览器中

windows下编辑一个qunit.html

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width">
  <title>QUnit Example</title>
  <link rel="stylesheet" href="https://code.jquery.com/qunit/qunit-2.4.0.css">
</head>
<body>
  <div></div>
  <div></div>
  <script src="https://code.jquery.com/qunit/qunit-2.4.0.js"></script>
  <script src="tests.js"></script>
</body>
</html>

同一目录下编辑一个js文件tests.js,内容是:

QUnit.test( "hello test", function( assert ) {
  assert.ok( 1 == "1", "Passed!" );
});

然后用浏览器打开qunit.html,可以看到浏览器中显示:

1 tests completed in 5 milliseconds, with 0 failed, 0 skipped, and 0 todo.
1 assertions of 1 passed, 0 failed.

在Node中

linux下安装:

$ npm install -g qunitjs
$ mkdir -p /opt/qunit/test

/opt/qunit/test目录下创建qunit.htmltests.js,内容如上一节。然后运行:

$ cd /opt/quinit
$ qunit
TAP version 13
ok 1 hello test
1..1
# pass 1
# skip 0
# todo 0
# fail 0

qunit默认加载test目录下的测试。也可以用下面的方式指定测试的文件:

$ qunit 'test/*.js'

断言(assert)

cookbook原文
任何单元测试的基本要素都是断言。测试的作者需要表达预期的结果,并将单元测试框架与实现产生的实际值进行比较。
QUnit内置了三种断言:ok、equal、deepEqual。

  • ok( truthy [, message ] ), 判断truthy的值是否为true
  • equal( actual, expected [, message ] ) ,判断actual == expected是否为true
  • deepEqual( actual, expected [, message ] ),判断actual === expected是否为true

equal断言的例子:

QUnit.test( "equal test", function( assert ) {
  assert.equal( 0, 0, "Zero, Zero; equal succeeds" );
  assert.equal( "", 0, "Empty, Zero; equal succeeds" );
  assert.equal( "", "", "Empty, Empty; equal succeeds" );
  assert.equal( 0, false, "Zero, false; equal succeeds" );

  assert.equal( "three", 3, "Three, 3; equal fails" );
  assert.equal( null, false, "null, false; equal fails" );
});