简介
buddy-tap 是一个用于测试 Node.js 应用程序和模块的轻量级测试工具。它基于 tap 和 puppy,可以使用基于 JavaScript 的测试语言编写测试用例。buddy-tap 旨在提供完整的测试框架,可以与 CI/CD 管道轻松集成。
安装
可以使用 npm 安装:
npm install buddy-tap --save-dev
使用
编写测试用例
首先,定义测试用例,并将其保存在 test/ 目录下的文件中,文件名必须以 .test.js 结尾。以下是一个简单的示例:
var tap = require('buddy-tap'); tap.test('the answer to life, the universe and everything', function (t) { t.equal(42, 42, 'should be 42'); t.end(); });
运行测试
在 package.json 文件中添加以下脚本:
{ "scripts": { "test": "buddy-tap test/**/*.test.js" } }
运行测试:
npm test
如果所有测试通过,将输出以下消息:
1..1 ok 1 the answer to life, the universe and everything # time=5ms # tests 1 # pass 1 # ok
测试用例
buddy-tap 支持以下测试用例函数:
test(name, cb)
定义一个测试套件,参数 name 是测试套件名称,参数 cb 是测试套件的回调函数。
test.skip(name, cb)
定义一个跳过的测试套件,这个测试套件不会被执行。它与 test() 的用法相同。
test.only(name, cb)
定义一个只运行的测试套件,只有它会被执行,它与 test() 的用法相同。
t.ok(value, [message])
断言值为真,如果为假报告错误。第二个参数是可选的错误消息。
t.ok(true, 'this should pass'); t.ok(1, 'this should pass'); t.ok('something', 'this should pass'); t.ok({}, 'this should pass'); t.ok([], 'this should pass');
t.notOk(value, [message])
断言值为假,如果为真报告错误。第二个参数是可选的错误消息。
t.notOk(false, 'this should pass'); t.notOk(0, 'this should pass'); t.notOk('', 'this should pass'); t.notOk(null, 'this should pass');
t.equal(actual, expected, [message])
断言两个值相等,如果不相等报告错误。第三个参数是可选的错误消息。
t.equal(42, 42, 'this should pass'); t.equal('foo', 'foo', 'this should pass');
t.notEqual(actual, expected, [message])
断言两个值不相等,如果相等报告错误。第三个参数是可选的错误消息。
t.notEqual(1, 2, 'this should pass'); t.notEqual('foo', 'bar', 'this should pass');
t.strictEqual(actual, expected, [message])
断言两个值类型和值相等,如果不相等报告错误。第三个参数是可选的错误消息。
t.strictEqual(42, 42, 'this should pass'); t.strictEqual('foo', 'foo', 'this should pass');
t.notStrictEqual(actual, expected, [message])
断言两个值类型和值不相等,如果相等报告错误。第三个参数是可选的错误消息。
t.notStrictEqual(42, '42', 'this should pass'); t.notStrictEqual('foo', 'bar', 'this should pass');
t.deepEqual(actual, expected, [message])
断言两个对象深度相等,如果不相等报告错误。第三个参数是可选的错误消息。
t.deepEqual({ foo: 'bar' }, { foo: 'bar' }, 'this should pass');
t.notDeepEqual(actual, expected, [message])
断言两个对象深度不相等,如果相等报告错误。第三个参数是可选的错误消息。
t.notDeepEqual({ foo: 'bar' }, { foo: 'baz' }, 'this should pass');
t.pass([message])
无条件通过测试。
t.pass('this should pass');
t.fail([message])
无条件失败测试。
t.fail('this should fail');
t.isError(value, [message])
断言值是 Error 类型,如果不是 Error 类型报告错误。第二个参数是可选的错误消息。
t.isError(new Error('this is an error'), 'this should pass');
t.isFunction(value, [message])
断言值是函数类型,如果不是函数类型报告错误。第二个参数是可选的错误消息。
t.isFunction(() => console.log('test'), 'this should pass');
t.isNumber(value, [message])
断言值是数字类型,如果不是数字类型报告错误。第二个参数是可选的错误消息。
t.isNumber(123, 'this should pass');
t.isString(value, [message])
断言值是字符串类型,如果不是字符串类型报告错误。第二个参数是可选的错误消息。
t.isString('hello', 'this should pass');
t.isArray(value, [message])
断言值是数组类型,如果不是数组类型报告错误。第二个参数是可选的错误消息。
t.isArray([1,2,3], 'this should pass');
t.isObject(value, [message])
断言值是对象类型,如果不是对象类型报告错误。第二个参数是可选的错误消息。
t.isObject({name: 'lily', age: 18}, 'this should pass');
t.isBoolean(value, [message])
断言值是布尔类型,如果不是布尔类型报告错误。第二个参数是可选的错误消息。
t.isBoolean(true, 'this should pass');
t.isNaN(value, [message])
断言值是 NaN,如果不是 NaN 报告错误。第二个参数是可选的错误消息。
t.isNaN(NaN, 'this should pass');
t.isNotNaN(value, [message])
断言值不是 NaN,如果是 NaN 报告错误。第二个参数是可选的错误消息。
t.isNotNaN(5, 'this should pass');
异步测试
如果测试涉及异步调用,可以使用 t.end() 函数结束测试。以下是一个简单的异步测试示例:
tap.test('asynchronous test', function (t) { setTimeout(function () { t.equal(4, 4, 'should be equal'); t.end(); }, 500); });
高级语法
如果需要在整个测试运行前或后执行代码,可以使用 t.beforeAll() 和 t.afterAll() 函数。以下是一个示例:
-- -------------------- ---- ------- --- --- - --------------------- ---------------------- --- ----- - -- -- --------- ------ --- ----- ----------------- ----------- ------- --- --------------------- --- ----- - -- -- --------- ----- --- ----- ---------------- ----------- ------- --- ------------- ------ -- ----- --- -------- --- ------------ -------- --- - ----------- --- ------- -- ----- -------- ---
总结
buddy-tap 是一个非常简单的测试框架,可以轻松地创建单元测试和集成测试。它具有易于阅读和编写的语法,具有大量的断言函数,并且可以与 CI/CD 管道轻松集成。如果您没有使用过测试框架,建议您从 buddy-tap 开始学习。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/60066c8dccdc64669dde5572