【问题标题】:Is it possible to switch database to test database on node.js?是否可以将数据库切换到 node.js 上的测试数据库?
【发布时间】:2014-01-03 20:58:24
【问题描述】:

我想在开发服务器上运行 e2e 测试,如量角器(或其他 Selenium 测试)。是否可以在测试时间切换到不同的测试数据库?我在每次测试运行之前加载夹具。 这种测试有哪些好的做法——在后端使用 node.js 和 mongo.db,关于数据库设置?

提前谢谢你。

【问题讨论】:

  • node.js 和 mongodb 是基本组件,因此它们不提供测试/开发/生产配置,您可以自己编写或找到一个好的可用框架。我能知道你的项目使用什么框架 express,sails,mean-stack,yo ...?
  • 我使用 yeoman - 通过 express 生成 Angular 应用程序。
  • 也许使用配置文件...stackoverflow.com/questions/5869216/…
  • 是的,这是个好主意。我正在使用配置文件。但我考虑过在运行 node.js 时切换数据库——只是不要将夹具加载到开发人员使用的数据库中,并且可能包含有用的数据。我现在的解决方案是在运行测试之前转储数据库并在之后恢复它。也许这种在运行时更改 dbs 的想法不是最聪明的......

标签: node.js integration-testing protractor


【解决方案1】:

恕我直言,最简单的方法是启动另一个具有不同配置的应用程序实例,即连接到不同的数据库并侦听不同的端口。然后你可以将 Selenium 指向它。理论上,应用程序的 FE 应该与端口无关,但是如果出现问题,nginx 可以提供很大帮助。

假设您希望它位于端口 3333 和域 test.myapp 上。这是 nginx 的示例配置文件。

server {
    listen 80;
    server_name test.myapp;

    location / {
            proxy_pass http://localhost:3333;
            proxy_set_header Host $host;
            proxy_buffering off;
    }
}

当然,您希望为您当前的开发服务器定义另一台服务器。只需冲洗并重复。

通常在 nodejs 应用程序中的配置是根据环境变量 NODE_ENV 的值来选择的。当你运行你的应用程序时,你可以像这样传递它(我假设它是一个 Linux 服务器):

$ NODE_ENV=test node app.js

然后在您的应用程序中,您可以轻松访问它:

var env = process.env.NODE_ENV

希望对你有帮助。

【讨论】:

  • 感谢您的回答。我正在使用 heroku 来托管应用程序。所以这意味着与 db 一起创建另一个应用程序。说实话,我希望这不是唯一的解决方案。
  • 嗯...我有点困惑。我认为这个想法是使用另一个数据库?无论如何,通常开发服务器(盒子或虚拟主机)与测试服务器是分开的,这样您就可以在开发仍在进行时测试特定的分支,例如发布候选。
  • 我们目前只有两个部署环境:开发和生产。因此,经过深思熟虑后,我看到了两种解决方案:按照您的建议添加测试服务器,集成和 e2e 测试可以在其中运行或在开发服务器上运行所有内容。在第二种情况下,我在集成测试之前转储数据库并在之后恢复。我的第一个想法是仅将不同的数据库用于显然不可能的测试(对于 e2e 测试)。
【解决方案2】:

Mocha 现在可以接受 --config 文件,该文件可用于指向不同的数据库。我使用同一个数据库服务器,一个服务器可以有多个数据库,这对于开发者来说非常简单和轻量。

https://www.w3resource.com/mocha/command-line-usage.php

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-14
    相关资源
    最近更新 更多