如何对节点js表示应用程序进行单元测试

时间:2015-07-24 06:48:21

标签: javascript node.js unit-testing express

我想开始在我的节点快速项目上进行单元测试。最简单,最简单的方法是什么?

2 个答案:

答案 0 :(得分:8)

以下是以下链接。

  1. <强> Mocha

    Mocha是一个在Node.js上运行的功能丰富的JavaScript测试框架 和浏览器,使异步测试简单而有趣。摩卡 测试连续运行,允许灵活准确的报告, 将未捕获的异常映射到正确的测试用例。

  2. <强> Karma

    Karma的主要目标是提供高效的测试环境 对开发者。环境是他们不必要的环境 设置大量配置,而不是开发人员的地方 可以编写代码并从测试中获得即时反馈。

  3. Chai

    Chai是节点和浏览器的BDD / TDD断言库 可以与任何javascript测试框架愉快配对。

  4. <强> Jasmine

    Jasmine是一个行为驱动开发测试框架 JavaScript的。它不依赖于浏览器,DOM或任何JavaScript 框架。因此,它适用于网站,Node.js项目或 JavaScript可以运行的任何地方。

  5. <强> Blanket

    Blanket.js易于安装,易于配置且易于使用 JavaScript代码覆盖库,可在浏览器中使用,也可在 的NodeJS。

  6. 您也可以按照以下教程

    1. Getting started with Mocha and Chai
    2. Introduction to Jasmine JS
    3. Setting up a project using karma with mocha and chai
    4. Node.js Testing Strategies
    5. Unit Testing with Node.js

答案 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-modulesinon

的组合,我取得了一些成功
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();
            });
    });

});