关系 "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()
函数。
我正在尝试在 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()
函数。