用于nodejs中的测试和开发的不同env变量

时间:2018-01-25 01:25:47

标签: node.js mongodb environment-variables mocha

我正在空闲时间开发一个nodejs api,我正在尝试实现测试。我正在从.env文件(使用dotenv加载)加载我的环境变量,其中包括我的开发mongodb数据库的DB_URI,DB_USER和DB_PASSWORD。

现在,我想创建一个单独的数据库进行测试,但是我不知道如何加载不同的变量来连接测试数据库而不是开发数据库。我部署到Heroku,我有不同的环境变量,所以它被覆盖得很好。

我试图在网上找到最佳做法的一些答案,但我一直无法做到。我想创建一个不同的.env文件,但根据https://www.npmjs.com/package/dotenv不建议这样做。

建议其他资源建议对package.json脚本中需要的特定变量进行硬编码。但是,如果我必须更改连接到不同数据库所需的所有变量,那么脚本将是巨大的。

我可以获得一些帮助,了解我应该如何做到这一点吗?

谢谢!

PS:如果需要,我会使用mocha + supertest进行测试。

1 个答案:

答案 0 :(得分:15)

  1. 在.env文件中,为每个环境添加变量:

    DB_URI_DEVELOPMENT="https://someuri.com"
    DB_USER_DEVELOPMENT=someuser
    DB_PASSWORD_DEVELOPMENT=somepassword
    
    DB_URI_TEST="https://otheruri.com"
    DB_USER_TEST=otheruser
    DB_PASSWORD_TEST=otherpassword
    

    1. development中启动应用程序:

      NODE_ENV=development node server.js
      

      test

      NODE_ENV=test node server.js
      

      1. 访问此环境的环境变量:

        // don't try to load .env file on Heroku
        if (process.env.NODE_ENV !== 'production') {
          require('dotenv').config()
        }
        
        // get the current environment
        var env = process.env.NODE_ENV
        
        // convert to uppercase
        var envString = env.toUpperCase()
        
        // access the environment variables for this environment
        var dbUri = process.env['DB_URI_' + envString]
        var dbUser = process.env['DB_USER_' + envString]
        var dbPassword = process.env['DB_PASSWORD_' + envString]
        

      2. 希望有所帮助!