我想开始在我的节点快速项目上进行单元测试。最简单,最简单的方法是什么?
答案 0 :(得分:8)
以下是以下链接。
<强> Mocha 强>
Mocha是一个在Node.js上运行的功能丰富的JavaScript测试框架 和浏览器,使异步测试简单而有趣。摩卡 测试连续运行,允许灵活准确的报告, 将未捕获的异常映射到正确的测试用例。
<强> Karma 强>
Karma的主要目标是提供高效的测试环境 对开发者。环境是他们不必要的环境 设置大量配置,而不是开发人员的地方 可以编写代码并从测试中获得即时反馈。
Chai是节点和浏览器的BDD / TDD断言库 可以与任何javascript测试框架愉快配对。
<强> Jasmine 强>
Jasmine是一个行为驱动开发测试框架 JavaScript的。它不依赖于浏览器,DOM或任何JavaScript 框架。因此,它适用于网站,Node.js项目或 JavaScript可以运行的任何地方。
<强> Blanket 强>
Blanket.js易于安装,易于配置且易于使用 JavaScript代码覆盖库,可在浏览器中使用,也可在 的NodeJS。
您也可以按照以下教程
答案 1 :(得分:1)
Mocha是Node / Express非常可靠的解决方案。他们的网站有一个getting started页面。一个简单的例子:
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模块的依赖关系(最终你可能会),事情会变得更加繁琐;通过sandboxed-module和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();
});
});
});