在travis-ci上设置postgres数据库网址以测试node.js应用程序

时间:2018-10-01 07:51:59

标签: node.js postgresql express testing travis-ci

我已经为自己的node.js应用程序编写了一些测试,并且这些测试使用Postgresql测试数据库在本地运行。

当我运行测试脚本npm run test时,环境设置为test,并且发生这种情况时,将为测试数据库设置数据库连接字符串,并且我在应用程序中的查询现在已完成在测试数据库上。像这样:

let connectionString;
if (process.env.NODE_ENV === 'test') {
  connectionString =`postgresql://${process.env.DB_USER}:${process.env.DB_PASS}@${process.env.DB_HOST}:${process.env.DB_PORT}/${process.env.TEST_DB_NAME}`;
} else {
  connectionString =`postgresql://${process.env.DB_USER}:${process.env.DB_PASS}@${process.env.DB_HOST}:${process.env.DB_PORT}/${process.env.DB_NAME}`;
}

这样,我的测试就可以在测试数据库上运行。

但是,在travis上,我知道我将需要进一步配置自己的数据库。在travisCI文档上,我了解了如何设置PostgreSQL数据库here,但这对我没有帮助,因为我如何获得上述完整的数据库URL?在travisCI上,我该如何用作数据库hostnameport,以及如何在代码中设置此值?

如何设置数据库连接字符串并在我的代码中访问它?

感谢任何想法。

2 个答案:

答案 0 :(得分:2)

在搜索如何做完全相同的事情时发现了这个问题,但这没有回答我的问题,所以如果有人遇到它,我想我已经解决了。

zerosand1s回答了这个问题,但似乎没有地方在线上实际说出主机名或端口应该是什么(也许我很傻,这很明显,但:shrug:)

按照psql docs

  

默认为PGPORT环境变量的值,或者,如果未设置,则默认为编译时指定的端口,通常为5432。

所以我猜想端口应该是5432(您可以只将PGPORT用作变量)。

在travis的其他地方,它说本地主机将与其他数据库(例如mongo)的127.0.0.1绑定,所以我也对此进行了猜测。

Travis文档告诉我们用户为postgres,密码为空白。

我正在使用整个字符串进行连接,在拆分时将其设置为(您可以提取每个组件):

postgres://postgres@127.0.0.1:5432/testing_db

我是在travis仪表板设置上完成的。

令人惊奇的是,所有这些都有效:tada:

希望这会有所帮助。

答案 1 :(得分:0)

根据文档,您可以像这样使用before_script创建数据库

before_script:
  - psql -c "CREATE DATABASE testing_db;" -U postgres

然后,您可以添加数据库凭据(以及数据库名称和端口等)来跟踪环境变量,例如

travis encrypt DB_USER=TEST_DB_USER --add env.matrix

您可以找到有关travis环境变量here的更多信息。您还可以在存储库设置下的travis仪表板上添加环境变量。