关系 "undefined.{table_name}" 不存在 - 使用 Mocha 和 Chai 对 NodeJS 无服务器应用程序进行单元测试

relation "undefined.{table_name}" does not exist - Unit test a NodeJS Serverless application with Mocha and Chai

我正在尝试在 Mocha 和 Chai 中为 NodeJS 无服务器 REST API 编写单元测试用例。 API 中有对 Postgres 数据库的数据库调用。所以我正在尝试使用我用来开发功能的同一个数据库(本地 Postgres 数据库)。

在serverless.yml文件中,环境变量设置如下

custom: 
stage: ${opt:stage, qa}

配置变量设置如下

environment: 
STAGE: ${self:custom.stage}
    NODE_ENV: ${self:custom.stage}
    DB_USERNAME: ${self:custom.secrets.username}
    DB_PASSWORD: ${self:custom.secrets.password}
    DB_HOST: ${file(./env.yml):${self:custom.stage}-db-host}
    DB_NAME: ${file(./env.yml):${self:custom.stage}-db-name}
    DB_PORT: ${file(./env.yml):${self:custom.stage}-db-port}
    DB_SCHEMA: ${file(./env.yml):${self:custom.stage}-db-schema}

并且在 env.yml 文件中我为如下环境设置了值

test-db-host: localhost
test-db-name: schumacher
test-db-port: 5432
test-db-schema: schumacher_user_qa

为了 运行 单元测试用例,我更改了 scripts/test 下 package.json 文件中的 NODE_ENV=test。这是它在 pakage.json 文件

中的样子
"scripts": {
    "test": "NODE_ENV=test nyc mocha 'tests/*.test.js' --exit" 
} 

然而,当我尝试 运行 我的单元测试用例时,我遇到了“关系 \”未定义。{table_name}\” 不存在的错误。

undefined.{table_name} ---> {schema_name}.{table_name} - 这里的模式值应该取自环境变量。但它是undefined

当运行宁单元测试用例时,有人能帮我如何将env.yml文件中声明的环境值传递给serverless.yml文件中声明的环境变量到'test'吗?非常感谢任何帮助。提前致谢。

Mocha 不调用无服务器框架,因此永远不会从 ENV 文件中解析这些变量(因为 serverless.yml 文件永远不会 read/interpolated)。

相反,您应该使用类似 dotenv 的工具来解析该文件并在您的测试环境中设置变量。或者直接在 process.env 上手动设置一些 beforeAll() 函数。