如何unit testing一个节点js express应用程序
我想开始在我的节点快递项目上进行unit testing。 什么是最简单和最简单的方法来做到这一点?
这里有以下链接。
-
摩卡
Mocha是在Node.js和浏览器上运行的function丰富的JavaScripttesting框架,使asynchronoustesting变得简单而有趣。 摩卡testing串行运行,允许灵活和准确的报告,同时将未捕获的exception映射到正确的testing用例。
-
因果报应
Karma的主要目标是为开发人员提供高效的testing环境。 这种环境不需要设置大量的configuration,而是开发人员只需编写代码并从testing中获得即时反馈的地方。
-
柴
柴是节点和浏览器的BDD / TDD断言库,可以愉快地与任何JavaScripttesting框架配对。
-
茉莉花
Jasmine是JavaScript的行为驱动开发testing框架。 它不依赖于浏览器,DOM或任何JavaScript框架。 因此它适用于网站,Node.js项目或JavaScript可以运行的任何地方。
-
毯
Blanket.js是一个易于安装,易于configuration和易于使用的JavaScript代码覆盖库,可在浏览器和nodejs中使用。
您也可以按照以下教程
- 开始使用摩卡和柴
- 茉莉花JS介绍
- 用摩卡和柴的业力build立一个项目
- Node.jstesting策略
- 使用Node.js进行unit testing
摩卡是一个非常坚实的Node / Express解决scheme。 他们的网站有一个入门页面。 一个简单的例子:
var assert = require("assert"); var request = require('supertest'); var express = require('express'); // Module under test var version = require('version'); describe('server.routes.version', function() { var app; beforeEach(function(done) { app = express(); app.use('/version', version); done(); }); it('gets the product version', function (done) { var expected = { 'version': '1.2.3' } request(app) .get('/version') .expect('Content-Type', /json/) .expect(200, expected) .end(function(err, res) { if (err) throw err; done(); }); }); });
如果你需要模拟一个Node模块的依赖(最终你可能会这样),事情会变得更加复杂; 我用沙箱模块和sinon的组合已经取得了一些成功:
var assert = require("assert"); var sinon = require('sinon'); var request = require('supertest'); var express = require('express'); describe('server.routes.version', function() { var app, version, mockConfig; beforeEach(function(done) { var mockConfig = sinon.mock({ getVersion: function() {} }); // Load the tested module within a sandbox var sandbox = require('sandboxed-module'); version = sandbox.require('../server/routes/version', { requires: { '../config': mockConfig } }); app = express(); app.use('/version', version); done(); }); it('gets the product version', function (done) { mockConfig.expects('getVersion').once().returns('1.2.3'); var expected = { 'version': '1.2.3' } request(app) .get('/version') .expect('Content-Type', /json/) .expect(200, expected) .end(function(err, res) { mockConfig.verify(); if (err) throw err; done(); }); }); });