Postgres "Error: SASL: SCRAM-SERVER-FIRST-MESSAGE: client password must be a string"



我正试图连接到一个测试数据库以在其上运行单元测试,但由于某种原因,它失败了但当我连接到我的开发数据库时,一切都很好

那是我的数据库.ts

import dotenv from 'dotenv'
import { Pool } from 'pg'
dotenv.config()
const POSTGRES_HOST = process.env.POSTGRES_HOST
const POSTGRES_USER = process.env.POSTGRES_USER
const POSTGRES_PASSWORD: string = process.env.POSTGRES_PASSWORD!
const POSTGRES_DB = process.env.POSTGRES_DB
const POSTGRES_TEST_DB = process.env.POSTGRES_TEST_DB
const ENV = process.env.ENV
let database
if (ENV === 'dev') {
database = {
host: POSTGRES_HOST,
user: POSTGRES_USER,
password: POSTGRES_PASSWORD,
database: POSTGRES_DB
}
} else if (ENV === 'test') {
database = {
host: POSTGRES_HOST,
database: POSTGRES_TEST_DB,
user: POSTGRES_USER,
password: POSTGRES_PASSWORD
}
}
const client = new Pool(database)
export default client

这是我的database.json文件

{
"dev": {
"driver": "pg",
"host": { "ENV": "POSTGRES_HOST" },
"database": { "ENV": "POSTGRES_DB" },
"user": { "ENV": "POSTGRES_USER" },
"password": { "ENV": "POSTGRES_PASSWORD" }
},
"test": {
"driver": "pg",
"host": { "ENV": "POSTGRES_HOST" },
"database": { "ENV": "POSTGRES_TEST_DB" },
"user": { "ENV": "POSTGRES_USER" },
"password": { "ENV": "POSTGRES_PASSWORD" }
}
}

我的.env文件

PORT=3000
POSTGRES_HOST=127.0.0.1
POSTGRES_DB=store
POSTGRES_TEST_DB=test
POSTGRES_TEST_PASSWORD=19992001
POSTGRES_USER=postgres
POSTGRES_PASSWORD=19992001
SALT_ROUNDS=10
BCRYPT_PASSWORD=123456
TOKEN_SECRET=50
ENV=dev

那是我的测试文件

import { User, userStore } from '../models/user'
import bcrypt from 'bcrypt'
import dotenv from 'dotenv'
dotenv.config()
const store = new userStore()
const pepper = process.env.BCRYPT_PASSWORD
const user: User = { username: 'test', password: 'test123' }
const pass = bcrypt.hashSync('test_password' + pepper, 10)
describe('User Model', () => {
it('should have an index method', () => {
expect(store.index).toBeDefined()
})
it('should have a show method', () => {
expect(store.show).toBeDefined()
})
it('should have a create method', () => {
expect(store.create).toBeDefined()
})
it('create method should add a user', async () => {
const result = await store.create(user)
if (result) {
expect(result.username).toBe('test')
}
})
})

前3个测试运行良好,但由于某种原因,最后一个测试不是

这是我正在使用的package.json中的脚本

"test": "set ENV=test db-migrate --env test up && jasmine && db-migrate --env test down"

通过尝试类似的东西来确保它是一个字符串

const POSTGRES_PASSWORD = process.env.POSTGRES_PASSWORD + ""

或者在您的env类型中

POSTGRES_PASSWORD="19992001"

相关内容