You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Travis CI技术问询:.travis.yml连接PostgreSQL及测试数据库报错排障

咱们一步步拆解你的问题——这是Travis CI搭配PostgreSQL时很常见的坑,我来帮你理清楚:

关于 cannot read property 'statusCode' of undefined 错误与数据库URL配置

首先,你的推测完全正确:这个错误大概率是因为测试时接口请求无法连接数据库,导致返回的response对象为undefined,进而访问response.statusCode时抛出异常。

你需要指定数据库URL吗?

必须要指定。Travis官方说“所有服务使用默认设置”,指的是PostgreSQL服务本身会以默认参数启动(比如默认用户postgres、无密码、默认端口5432),但你的Node.js应用并不知道这些默认参数,必须通过环境变量把连接信息传递给它。

你可以在.travis.yml的env字段里添加数据库连接URL,格式如下:

env:
  - NODE_ENV="test"
    DATABASE_URL="postgres://postgres@localhost:5432/travis_ci_test"

如果你的应用是用分开的环境变量(比如DB_USER、DB_NAME、DB_HOST)来配置数据库,也可以分别设置:

env:
  - NODE_ENV="test"
    DB_USER="postgres"
    DB_NAME="travis_ci_test"
    DB_HOST="localhost"
    DB_PORT="5432"

关键是要和你应用代码里读取的配置变量名完全对应。


修正你的.travis.yml配置

当前你的配置有两个小问题:

  1. before_script里的第二个psql命令引号格式错误,会导致脚本执行失败
  2. 缺少数据库连接的环境变量,应用无法正确连接数据库

修正后的完整配置如下:

language: node_js
node_js:
  - "stable"
env:
  - NODE_ENV="test"
    DATABASE_URL="postgres://postgres@localhost:5432/travis_ci_test"
services:
  - postgresql
install:
  - npm ci
cache:
  directories:
    - "$HOME/.npm"
before_script:
  # 创建测试数据库
  - psql -c 'CREATE DATABASE travis_ci_test;' -U postgres
  # 执行SQL脚本初始化表结构(修正了命令格式)
  - psql -U postgres -d travis_ci_test -f ./testdb/teamwork.sql
script:
  - npm test

关键细节说明:

  • services: - postgresql:告诉Travis启动PostgreSQL服务
  • before_script中的SQL命令:确保先创建数据库,再执行初始化脚本,注意命令参数的顺序(-d指定数据库,-f指定脚本文件)
  • 环境变量DATABASE_URL:让你的应用在测试环境下能直接读取到正确的数据库连接地址

额外提醒:确保应用代码读取环境变量

最后要确认你的测试代码/应用配置里,是从环境变量中读取数据库连接信息的。比如如果用Knex.js,你的knexfile.js的test环境应该是:

module.exports = {
  test: {
    client: 'postgresql',
    connection: process.env.DATABASE_URL,
    // 其他配置...
  }
};

如果是原生的pg模块,连接代码应该是:

const { Pool } = require('pg');
const pool = new Pool({
  connectionString: process.env.DATABASE_URL,
});

内容的提问来源于stack exchange,提问作者Uwem Uke

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:43:31