javascript - 为什么我在运行 jest 时在 Gitlab CI 中有 TypeError,但在我的机器上却没有?
问题描述
我正在使用以下代码段从字符串中提取一些信息,这似乎工作正常:
const str="dialect://user:password@host:port/name";
const regex=/([^\:]*)\:\/\/([^\:]*)\:([^\@]*)\@([^\:]*)\:([^\/]*)\/(.*)/
let [, DB_DIALECT, DB_USER, DB_PASSWORD, DB_HOST, DB_PORT, DB_NAME] = regex.exec(str);
console.log(DB_DIALECT);
console.log(DB_USER);
console.log(DB_PASSWORD);
console.log(DB_HOST);
console.log(DB_PORT);
console.log(DB_NAME);
正如你在上面看到的,它自己工作。我有一些单元测试可以在我的机器上毫无错误地执行。但是,当我在 Gitlab CI 中运行相同的测试时,出现以下错误
$ npm run test
> express-api@1.0.0 test /builds/organization/enoapp/folder
> jest --runInBand --forceExit spec
FAIL spec/api.test.js
● Test suite failed to run
TypeError: regex.exec is not a function or its return value is not iterable
14 | // Extract info from env variable
15 | const regex=/([^\:]*)\:\/\/([^\:]*)\:([^\@]*)\@([^\:]*)\:([^\/]*)\/(.*)/
> 16 | let [, DB_DIALECT, DB_USER, DB_PASSWORD, DB_HOST, DB_PORT, DB_NAME] = regex.exec(process.env.DATABASE_URL);
|
为什么相同的看似正确的代码会在 Gitlab CI 上产生错误?
我认为这可能是因为里面有什么,process.env.DATABASE_URL
但这不会导致regex.exec(...) is null
错误吗?
解决方案
事实证明,尽管出现了奇怪的错误,但MinusFour说这是罪魁祸首是正确的:process.env.DATABASE_URL
- 我在我的 gitignore 中的特定于测试的 dotenv 文件中定义了这个变量
- 从 gitignore 中删除它并推送解决了这个问题
- 我仍然不确定为什么会出现此错误,而不是
regex.exec(...) is null
我期望在undefined
变量上运行 regex.exec。
推荐阅读
- emacs - emacs org-mode 导出到 iCalendar 格式问题
- java - 检查类中的字符串是否为空
- ios - 以编程方式创建的 UIElement 的 id 是否自动生成?
- log4j - 我的要求是我希望我的应用程序在达到限制和最大备份索引后创建新文件?我正在使用 log4j
- shell - perl中超时的实现
- sql-server - MSSQL ColumnStore 索引 - 常规索引的使用
- azure - 列出 Azure 策略“允许的虚拟机 SKU”的可用 VM SKU
- php - 带有 plugins_url 的 require_once wordpress 错误
- django - 如何通过 PythonAnywhere.com 部署网站
- javascript - 如何从反应路线中获取 href id?