我想使用单独的数据库来运行测试。所以我尝试为多种环境(开发和测试)配置TypeORM,但它不起作用。它只使用' dev'配置。
这是我的npm脚本:
"scripts": {
"start": "NODE_ENV=dev node dist/index.js",
"test": "NODE_ENV=test mocha --reporter spec --compilers ts:ts-node/register 'test/**/*.test.ts'"
}
如果我console.log(process.env.NODE_ENV)
我得到了正确的结果(" dev" /" test")。
这是我的ormconfig.json
[
{
"environment": "dev",
"name": "default",
"driver": {
"type": "mysql",
"host": "localhost",
"port": 3306,
"username": "root",
"password": "",
"database": "api"
},
"entities": [ "dist/model/*.js" ],
"autoSchemaSync": true
},
{
"environment": "test",
"name": "default",
"driver": {
"type": "mysql",
"host": "localhost",
"port": 3306,
"username": "root",
"password": "",
"database": "api_test"
},
"entities": [ "dist/model/*.js" ],
"autoSchemaSync": true
}
]
我与createConnection();
联系。我事先手动创建了api
和api_test
数据库。
为什么TypeORM没有使用"测试"我设置NODE_ENV = test?
时的配置答案 0 :(得分:1)
我有类似的问题。我通过为每个连接使用不同的“名称”字段来实现此目的。对于我的运行时连接,我保留了name=default
,对于我的测试连接,我使用了name=test
。所以:
[
{
"environment": "dev",
"name": "default",
"driver": {
"type": "mysql",
"host": "localhost",
"port": 3306,
"username": "root",
"password": "",
"database": "api"
},
"entities": [ "dist/model/*.js" ],
"autoSchemaSync": true
},
{
"environment": "test",
"name": "test", //// CHANGED
"driver": {
"type": "mysql",
"host": "localhost",
"port": 3306,
"username": "root",
"password": "",
"database": "api_test"
},
"entities": [ "dist/model/*.js" ],
"autoSchemaSync": true
}
]
在我的应用程序中,我只使用createConnection()
,它会自动使用与name=default
的连接。
对于我的测试,我使用了typeorm的createConnections()
(注意s)。这会加载所有连接。加载后,我会在使用getConnection('test')
后立即获得测试连接。我的测试中的beforeAll
在打字稿中看起来像这样:
beforeAll(async () => {
await createConnections();
getConnection('test');
});
在javascript中,它可能看起来像:
beforeAll(() => {
createConnections().then(() => {
getConnection('test');
});
});
然后我的测试开始通过。希望有所帮助。
答案 1 :(得分:0)
答案 2 :(得分:0)
您可以将ormconfig.json
更改为js
文件,然后执行以下操作:
require('dotenv/config');
const database = {
development: "dev-db",
production: 'prod-db',
test: 'test-db'
}
module.exports = {
type: 'postgres',
host: 'localhost',
port: 5432,
username: 'ur-username',
password: 'password',
database: database[process.env.NODE_ENV],
entities: ['dist/**/*.entity{.ts,.js}'],
synchronize: true,
migrationsTableName: 'migration',
migrations: ['migration/*.js'],
cli: {
migrationsDir: 'migration',
},
};
然后,在运行测试时,请不要忘记设置适当的环境。 NODE_ENV=test
应该可以。