我正在使用以下代码片段从字符串中提取一些信息,这似乎正常工作:
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
变量上运行regex.exec的错误。
关于javascript - 为什么在运行Jest时我在Gitlab CI中有TypeError但在我的机器上却没有TypeError?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57808737/