使用虚拟数据库在自己的环境中测试 express.js 应用程序

Posted

技术标签:

【中文标题】使用虚拟数据库在自己的环境中测试 express.js 应用程序【英文标题】:Testing express.js app in own environment with dummy db 【发布时间】:2012-09-12 03:51:35 【问题描述】:

我的网络应用具有以下结构

db.js:

mongoose = require('mongoose');
db = mongoose.createConnection("...");
playerSchema = new mongoose.Schema(
  // my schema stuff
);
exports.Player = db.model("player", playerSchema);

我的所有路线都在一个自己的文件中(route/index.js):

db = require('../db');

exports.createPlayer = function(req, res) 
  player = new db.Player();
  player.name = req.body.player_name;
  player.save(function(err) 
    if (err) 
      log(err);
    
    res.redirect("/");
  );
;

app.js

routes = require('./routes');
app.post("/start", routes.createPlayer);

我使用 mocha 测试应用程序,应该和 supertest 类似以下示例

should = require('should');
supertest = require('supertest');
app = require('../app');

describe("POST /start", function() 
  it("should redirect", function(done) 
    supertest(app)
    .post("/start")
    .send(
      player_name: "John Wayne"
    ).end(function(err, res) 
      should.not.exist(err);
      done();
    );
  );
);

一切正常,但我不想针对我的生产数据库进行测试。有谁知道使用虚拟/不同数据库进行测试的聪明方法?也许使用不同的环境?我有点卡住了!

【问题讨论】:

当您连接到 MondoDB 时,您可以指定主机、端口和数据库名称。您可以将此选项存储在某个配置文件中。您甚至可以划分您的生产、开发和测试配置,根据当前的NODE_ENV 环境加载其中一个。 【参考方案1】:

我有一个 common.js 文件,它是我包含在测试文件中的第一个文件。顶部是这样的:

process.env.NODE_ENV    = 'test'
process.env.MONGOHQ_URL = 'mongodb://localhost/project-testing'

当我进行数据库连接时,我会这样:

var dbUri = process.env.MONGOHQ_URL || 'mongodb://localhost/project'
var db    = mongoose.connect(dbUri)

【讨论】:

这个最好,设置一个config.development.js和一个config.production.js 我更喜欢使用 config/environment.js 来使用 NODE_ENV 设置不同的属性。不应检入版本控制的密码应为环境变量(如 MONGOHQ_URL)

以上是关于使用虚拟数据库在自己的环境中测试 express.js 应用程序的主要内容,如果未能解决你的问题,请参考以下文章

Android studio 搭建测试环境 创建虚拟机

[环境搭建] VS-Visual Studio-IIS Express 支持局域网访问

[环境搭建] VS-Visual Studio-IIS Express 支持局域网访问

浅谈企业虚拟化环境的安全风险与渗透测试方法

SSIS - 在 Oracle Express Edition 中使用 Attunity 连接器

Firebase 存储在 Express 服务器环境中不起作用