首页 > 解决方案 > 为什么我在运行 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错误吗?

标签: javascriptregexjestjsgitlab-ci

解决方案


事实证明,尽管出现了奇怪的错误,但MinusFour说这是罪魁祸首是正确的:process.env.DATABASE_URL

  • 我在我的 gitignore 中的特定于测试的 dotenv 文件中定义了这个变量
  • 从 gitignore 中删除它并推送解决了这个问题
  • 我仍然不确定为什么会出现此错误,而不是regex.exec(...) is null我期望在undefined变量上运行 regex.exec。

推荐阅读