Node.js 应用程序的单元测试
Node.js 是一个广泛使用的 JavaScript 库,基于 Chrome 的 V8 JavaScript 引擎,用于在 Web 开发中开发服务器端应用程序。
单元测试是一种软件测试方法,其中单独测试单个单元/组件。一个单元可以描述为应用程序中最小的可测试代码部分。单元测试通常由开发人员在应用程序的开发阶段进行。
在 Node.js 中,有许多框架可用于运行单元测试。他们之中有一些是:
- 摩卡
- 笑话
- 茉莉花
- 艾娃
使用这些框架对节点应用程序进行单元测试:
- Mocha: Mocha 是一个古老且广泛使用的节点应用程序测试框架。它支持异步操作,如回调、promise 和 async/await。它是一个高度可扩展和可定制的框架,支持不同的断言和模拟库。
要安装它,请打开命令提示符并键入以下命令:
# Installs globally npm install mocha -g # installs in the current directory npm install mocha --save-dev
如何使用摩卡?
为了在您的应用程序中使用此框架:- 打开项目的根文件夹并在其中创建一个名为test的新文件夹。
- 在 test 文件夹中,创建一个名为 test.js 的新文件,其中包含与测试相关的所有代码。
- 打开 package.json 并在脚本块中添加以下行。
"scripts": { "test": "mocha --recursive --exit" }
例子:
// Requiring module const assert = require('assert'); // We can group similar tests inside a describe block describe("Simple Calculations", () => { before(() => { console.log( "This part executes once before all tests" ); }); after(() => { console.log( "This part executes once after all tests" ); }); // We can add nested blocks for different tests describe( "Test1", () => { beforeEach(() => { console.log( "executes before every test" ); }); it("Is returning 5 when adding 2 + 3", () => { assert.equal(2 + 3, 5); }); it("Is returning 6 when multiplying 2 * 3", () => { assert.equal(2*3, 6); }); }); describe("Test2", () => { beforeEach(() => { console.log( "executes before every test" ); }); it("Is returning 4 when adding 2 + 3", () => { assert.equal(2 + 3, 4); }); it("Is returning 8 when multiplying 2 * 4", () => { assert.equal(2*4, 8); }); }); });
复制上面的代码并将其粘贴到我们之前创建的 test.js 文件中。要运行这些测试,请在项目的根目录中打开命令提示符并键入以下命令:
npm run test
输出:
什么是柴?
Chai 是一个断言库,经常与 Mocha 一起使用。它可以用作 Node.js 的 TTD(测试驱动开发)/BDD(行为驱动开发)断言库,可以与任何基于 JavaScript 的测试框架配对使用。类似于上面代码中的 assert.equal() 语句,我们可以使用 Chai 来编写类似英语句子的测试。要安装它,请在项目的根目录中打开命令提示符并键入以下命令:
npm install chai
例子:
const expect = require('chai').expect; describe("Testing with chai", () => { it("Is returning 4 when adding 2 + 2", () => { expect(2 + 2).to.equal(4); }); it("Is returning boolean value as true", () => { expect(5 == 5).to.be.true; }); it("Are both the sentences matching", () => { expect("This is working").to.equal('This is working'); }); });
输出:
- Jest: Jest 也是一个流行的测试框架,以其简单性着称。它由 Facebook 定期开发和维护。 jest 的关键特性之一是它有很好的文档记录,并且它支持并行测试运行,即每个测试都将在自己的进程中运行以最大限度地提高性能。它还包括一些功能,如测试观察、覆盖和快照。
您可以使用以下命令安装它:
npm install --save-dev jest
注意:默认情况下,Jest 期望在您的根文件夹中名为“ __tests__ ”的文件夹中找到所有测试文件。
例子:
describe("Testing with Jest", () => { test("Addition", () => { const sum = 2 + 3; const expectedResult = 5; expect(sum).toEqual(expectedResult); }); // Jest also allows a test to run multiple // times using different values test.each([[1, 1, 2], [-1, 1, 0], [3, 2, 6]])( 'Does %i + %i equals %i', (a, b, expectedResult) => { expect(a + b).toBe(expectedResult); }); });
输出:
- Jasmine: Jasmine 也是一个强大的测试框架,自 2010 年以来一直存在。它是一个用于测试 JavaScript 代码的行为驱动开发(BDD)框架。它以与其他测试框架(如 Sinon 和 Chai)的兼容性和灵活性而闻名。这里的测试文件必须有一个特定的后缀 (*spec.js)。
您可以使用以下命令安装它:
npm install jasmine-node
例子:
describe("Test", function() { it("Addition", function() { var sum = 2 + 3; expect(sum).toEqual(5); }); });
- AVA: AVA 是一个相对较新的简约框架,允许您同时运行 JavaScript 测试。与 Jest 框架一样,它也支持快照和并行处理,这使得它与其他框架相比相对较快。关键特性包括没有隐式全局变量和对异步函数的内置支持。
您可以使用以下命令安装它:
npm init ava
例子:
import test from 'ava'; test('Addition', t => { t.is(2 + 3, 5); });