我正在使用以下代码片段从字符串中提取一些信息,这似乎正常工作:



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/

10-12 06:55