I would like to create a new environment for testing my app. I have a .env
file and .env.test
file.
This is my app.module.ts
file:
@Module({
imports: [
ConfigModule.forRoot({
envFilePath: !process.env.NODE_ENV
? '.env'
: `.env.${process.env.NODE_ENV}`,
}),
TypeOrmModule.forRoot({
type: 'postgres',
host: process.env.POSTGRES_HOST,
port: parseInt(<string>process.env.POSTGRES_PORT),
username: process.env.POSTGRES_USER,
password: process.env.POSTGRES_PASSWORD,
database: process.env.POSTGRES_DATABASE,
autoLoadEntities: true,
entities: [User],
synchronize: true,
}),
AuthModule,
],
controllers: [],
providers: [],
})
export class AppModule {}
The problem here is that .env.test
is never called, .env
always runs even though process.env.NODE_ENV
returns test
.
And this is how i set up my package.json
file:
"start:test": "NODE_ENV=test nest start --watch",
This is how my .env.test
file looks like
POSTGRES_HOST=localhost
POSTGRES_PORT=5432
POSTGRES_USER=postgres
POSTGRES_PASSWORD=Random
POSTGRES_DATABASE=db-test
I also tried to hardcode envFilePath: '.env.test',
and it still not working. For .env.test
file to work i have to rename .env
file and then it works fine.
UPDATE!
It works now. What i did was i put
ConfigModule.forRoot({
envFilePath: !process.env.NODE_ENV
? '.env'
: `.env.${process.env.NODE_ENV}`,
}),
in every module i have in my app.
As you're using the
ConfigModule
presumably from@nestjs/config
you should be using theTypeormModule
'sforRootAsync
method to make sure you use the read.env
file.