Closed gleysonabreu closed 4 years ago
The error happened because connection not initialized yet so create a async await connection and now works fine.
Could you please write your example? I'm facing the same issue. Thanks!
Could you please write your example? I'm facing the same issue. Thanks!
I changed my connection to async/await, like this:
const connection = async (name = 'default'): Promise<Connection> => {
return createConnection(
Object.assign(ormConfig, {
name,
}),
);
};
export default connection;
And changed my tests to:
import createConnection from '@shared/infra/typeorm';
import { Connection, getConnection } from 'typeorm';
let connection: Connection;
describe('Tests', () => {
beforeAll(async () => {
connection = await createConnection();
});
afterAll(async () => {
const myConnection = getConnection();
await connection.close();
await myConnection.close();
});
it('should be anything', async () => {
//TODO
});
});
This way I can solve the connection problem with the tests.
This worked perfectly to me! Thank you @gleysonabreu !
@gleysonabreu pode mostrar o formato do seu ormConfig
? Tentei da forma que comentou porém continuo com problemas, agora retorna o seguinte erro:
@gleysonabreu pode mostrar o formato do seu
ormConfig
? Tentei da forma que comentou porém continuo com problemas, agora retorna o seguinte erro:
@gdlopes Meu código do ORM eu fiz com typescript:
import { ConnectionOptions } from 'typeorm';
import dotenv from 'dotenv';
dotenv.config({
path: process.env.NODE_ENV === 'development' ? '.env.development' : '.env',
});
const ormConfig: ConnectionOptions = {
type: 'postgres',
host: process.env.TYPEORM_HOST,
port: Number(process.env.TYPEORM_PORT),
username: process.env.TYPEORM_USERNAME,
password: process.env.TYPEORM_PASSWORD,
database: process.env.TYPEORM_DATABASE,
synchronize: process.env.TYPEORM_SYNCHRONIZE === 'true',
logging: process.env.TYPEORM_LOGGING === 'true',
entities: [String(process.env.TYPEORM_ENTITIES)],
migrations: [String(process.env.TYPEORM_MIGRATIONS)],
cli: {
migrationsDir: process.env.TYPEORM_MIGRATIONS_DIR,
},
};
export = ormConfig;
As variáveis de ambiente são:
# TYPEORM
TYPEORM_CONNECTION=postgres
TYPEORM_HOST=localhost
TYPEORM_USERNAME=postgres
TYPEORM_PASSWORD=password
TYPEORM_PORT=5432
TYPEORM_SYNCHRONIZE=false
TYPEORM_LOGGING=false
TYPEORM_DATABASE=password
TYPEORM_ENTITIES=./src/modules/**/infra/typeorm/entities/*.ts
TYPEORM_MIGRATIONS=./src/shared/infra/typeorm/migrations/*.ts
TYPEORM_MIGRATIONS_DIR=./src/shared/infra/typeorm/migrations
Cara, muito estranho, fiz exatamente dessa forma mas o erro continua:
Porém se eu deixar assim, funciona:
import "reflect-metadata";
import { createConnection } from 'typeorm';
createConnection();
O problema é que dessa forma está dando erro nos testes de integração. Mas a aplicação em si funciona perfeitamente.
Tem ideia do que pode ser @gleysonabreu ?
Cara, muito estranho, fiz exatamente dessa forma mas o erro continua:
Porém se eu deixar assim, funciona:
import "reflect-metadata"; import { createConnection } from 'typeorm'; createConnection();
O problema é que dessa forma está dando erro nos testes de integração. Mas a aplicação em si funciona perfeitamente.
Tem ideia do que pode ser @gleysonabreu ?
@gdlopes o problema que eu estava tendo era justamente esse funcionava normal mas com os testes não funcionava e como resolvi foi transformar a conexão em async/await e coloca o método beforeAll como async await e importar a conexão em cada arquivo de teste e resolveu meu problema. Dei uma pesquisa aqui agora para vê se encontrava algo novo sobre mas não achei nada de útil relacionado ao problema.
e necessario importar o container no primeiro arquivo da sua aplicacao
ex: import "./shared/container"
e necessario importar o container no primeiro arquivo da sua aplicacao
ex: import "./shared/container"
@JunioResende Funcionou aqui. Valeu!
Cara, muito estranho, fiz exatamente dessa forma mas o erro continua: Porém se eu deixar assim, funciona:
import "reflect-metadata"; import { createConnection } from 'typeorm'; createConnection();
O problema é que dessa forma está dando erro nos testes de integração. Mas a aplicação em si funciona perfeitamente. Tem ideia do que pode ser @gleysonabreu ?
@gdlopes o problema que eu estava tendo era justamente esse funcionava normal mas com os testes não funcionava e como resolvi foi transformar a conexão em async/await e coloca o método beforeAll como async await e importar a conexão em cada arquivo de teste e resolveu meu problema. Dei uma pesquisa aqui agora para vê se encontrava algo novo sobre mas não achei nada de útil relacionado ao problema.
Opa, Gleyson, beleza? Cara, poderia exemplificar melhor como você resolveu esse problema? Pra mim ta da mesma forma: consigo executar normalmente a aplicação mas ao tentar executar os testes, ocorre o erro da injeção de dependencia.
Eu tentei aplicar o que foi dito mais acima por você e os demais mas não deu certo. Creio que possa estar fazendo alguma coisa coisa errada ao tentar replicar a solução. Após aplicar tudo, continuou rodando a aplicação mas o teste novamente não funciona. O erro que ocorre ao executar os testes é: CannotExecuteNotConnectedError: Cannot execute operation on "default" connection because connection is not yet established.
Se você souber o que pode ser, lhe agradeceria muito. Queria também entender onde fica o seu arquivo ormconfig.ts (a nivel de diretório e o código), o seu index de da pasta shared, como ta o codigo completo e os demais arquivos dos códigos postados anteriormente.
De já te agradeço demais!
Cara, muito estranho, fiz exatamente dessa forma mas o erro continua: Porém se eu deixar assim, funciona:
import "reflect-metadata"; import { createConnection } from 'typeorm'; createConnection();
O problema é que dessa forma está dando erro nos testes de integração. Mas a aplicação em si funciona perfeitamente. Tem ideia do que pode ser @gleysonabreu ?
@gdlopes o problema que eu estava tendo era justamente esse funcionava normal mas com os testes não funcionava e como resolvi foi transformar a conexão em async/await e coloca o método beforeAll como async await e importar a conexão em cada arquivo de teste e resolveu meu problema. Dei uma pesquisa aqui agora para vê se encontrava algo novo sobre mas não achei nada de útil relacionado ao problema.
Opa, Gleyson, beleza? Cara, poderia exemplificar melhor como você resolveu esse problema? Pra mim ta da mesma forma: consigo executar normalmente a aplicação mas ao tentar executar os testes, ocorre o erro da injeção de dependencia.
Eu tentei aplicar o que foi dito mais acima por você e os demais mas não deu certo. Creio que possa estar fazendo alguma coisa coisa errada ao tentar replicar a solução. Após aplicar tudo, continuou rodando a aplicação mas o teste novamente não funciona. O erro que ocorre ao executar os testes é: CannotExecuteNotConnectedError: Cannot execute operation on "default" connection because connection is not yet established.
Se você souber o que pode ser, lhe agradeceria muito. Queria também entender onde fica o seu arquivo ormconfig.ts (a nivel de diretório e o código), o seu index de da pasta shared, como ta o codigo completo e os demais arquivos dos códigos postados anteriormente.
De já te agradeço demais!
Fiz algumas alterações aqui no código e funcionou!
no arquivo ormconfig.ts eu alterei para:
dotenv.config({ path: '.env.development', }); Creio que terei que alterar no código quando quiser utilizar o .env
No meu arquivo de testes, eu comentei a linha onde tem await connection.close(), dentro do AfterAll(). Deu certo, não apresentou mais o erro no código, o teste passou e está armazenando no banco normalmente!
Muito obrigado, @gleysonabreu pela solução compartilhada!
Cara, muito estranho, fiz exatamente dessa forma mas o erro continua: Porém se eu deixar assim, funciona:
import "reflect-metadata"; import { createConnection } from 'typeorm'; createConnection();
O problema é que dessa forma está dando erro nos testes de integração. Mas a aplicação em si funciona perfeitamente. Tem ideia do que pode ser @gleysonabreu ?
@gdlopes o problema que eu estava tendo era justamente esse funcionava normal mas com os testes não funcionava e como resolvi foi transformar a conexão em async/await e coloca o método beforeAll como async await e importar a conexão em cada arquivo de teste e resolveu meu problema. Dei uma pesquisa aqui agora para vê se encontrava algo novo sobre mas não achei nada de útil relacionado ao problema.
Opa, Gleyson, beleza? Cara, poderia exemplificar melhor como você resolveu esse problema? Pra mim ta da mesma forma: consigo executar normalmente a aplicação mas ao tentar executar os testes, ocorre o erro da injeção de dependencia.
Eu tentei aplicar o que foi dito mais acima por você e os demais mas não deu certo. Creio que possa estar fazendo alguma coisa coisa errada ao tentar replicar a solução. Após aplicar tudo, continuou rodando a aplicação mas o teste novamente não funciona. O erro que ocorre ao executar os testes é: CannotExecuteNotConnectedError: Cannot execute operation on "default" connection because connection is not yet established.
Se você souber o que pode ser, lhe agradeceria muito. Queria também entender onde fica o seu arquivo ormconfig.ts (a nivel de diretório e o código), o seu index de da pasta shared, como ta o codigo completo e os demais arquivos dos códigos postados anteriormente.
De já te agradeço demais!
Já faz tempo que diz aquilo e nem tenho mais o código. Mas eu fui no seu perfil do Github e vi seu projeto e clonei ele aqui para da uma olhada!! Fiz algumas modificações nele para os tests de integração funcionarem e vou listar abaixo:
Primeiramente fui no arquivo de conexão do typeorm e modifiquei para:
export default async () => createConnection();
Após isso fui no arquivo app e troquei a importação da conexão e instanciei ela:
import connection from '../typeorm';
connection();
E a partir de agora eu uso duas opções para instanciar as conexões nos tests, a primeira é: você ir em cada test de integração e adicionar o código:
import { Connection } from 'typeorm';
import connect from '@shared/infra/typeorm';
let connection: Connection;
describe(.........)........ {
beforeAll(async () => {
connection = await connect();
});
afterAll(async () => {
await connection.close();
});
}
Ou a segunda é você criar um arquivo jest.setup.ts na raiz do projeto para o jest importar esse arquivo e instanciar a conexão mas você vai ter que está com banco de dados de ligado tanto para tests de integração quanto para os tests de unitários etc.. jest.setup.ts:
import { Connection } from 'typeorm';
import connect from '@shared/infra/typeorm';
let connection: Connection;
beforeAll(async () => {
connection = await connect();
});
afterAll(async () => {
await connection.close();
});
e no jest.config.js você adiciona:
setupFilesAfterEnv: ['<rootDir>/jest.setup.ts'],
Ao fazer isso e executar todos os tests passaram.
Test Suites: 7 passed, 7 total
Tests: 12 passed, 12 total
Snapshots: 0 total
Time: 5.166 s, estimated 10 s
Cara, muito estranho, fiz exatamente dessa forma mas o erro continua: Porém se eu deixar assim, funciona:
import "reflect-metadata"; import { createConnection } from 'typeorm'; createConnection();
O problema é que dessa forma está dando erro nos testes de integração. Mas a aplicação em si funciona perfeitamente. Tem ideia do que pode ser @gleysonabreu ?
@gdlopes o problema que eu estava tendo era justamente esse funcionava normal mas com os testes não funcionava e como resolvi foi transformar a conexão em async/await e coloca o método beforeAll como async await e importar a conexão em cada arquivo de teste e resolveu meu problema. Dei uma pesquisa aqui agora para vê se encontrava algo novo sobre mas não achei nada de útil relacionado ao problema.
Opa, Gleyson, beleza? Cara, poderia exemplificar melhor como você resolveu esse problema? Pra mim ta da mesma forma: consigo executar normalmente a aplicação mas ao tentar executar os testes, ocorre o erro da injeção de dependencia. Eu tentei aplicar o que foi dito mais acima por você e os demais mas não deu certo. Creio que possa estar fazendo alguma coisa coisa errada ao tentar replicar a solução. Após aplicar tudo, continuou rodando a aplicação mas o teste novamente não funciona. O erro que ocorre ao executar os testes é: CannotExecuteNotConnectedError: Cannot execute operation on "default" connection because connection is not yet established. Se você souber o que pode ser, lhe agradeceria muito. Queria também entender onde fica o seu arquivo ormconfig.ts (a nivel de diretório e o código), o seu index de da pasta shared, como ta o codigo completo e os demais arquivos dos códigos postados anteriormente. De já te agradeço demais!
Já faz tempo que diz aquilo e nem tenho mais o código. Mas eu fui no seu perfil do Github e vi seu projeto e clonei ele aqui para da uma olhada!! Fiz algumas modificações nele para os tests de integração funcionarem e vou listar abaixo:
Primeiramente fui no arquivo de conexão do typeorm e modifiquei para:
export default async () => createConnection();
Após isso fui no arquivo app e troquei a importação da conexão e instanciei ela:
import connection from '../typeorm'; connection();
E a partir de agora eu uso duas opções para instanciar as conexões nos tests, a primeira é: você ir em cada test de integração e adicionar o código:
import { Connection } from 'typeorm'; import connect from '@shared/infra/typeorm'; let connection: Connection; describe(.........)........ { beforeAll(async () => { connection = await connect(); }); afterAll(async () => { await connection.close(); }); }
Ou a segunda é você criar um arquivo jest.setup.ts para o jest importar esse arquivo e instanciar a conexão mas você vai ter que está com banco de dados de ligado tanto para tests de integração quanto para os tests de unitários etc.. jest.setup.ts:
import { Connection } from 'typeorm'; import connect from '@shared/infra/typeorm'; let connection: Connection; beforeAll(async () => { connection = await connect(); }); afterAll(async () => { await connection.close(); });
e no jest.config.js você adiciona:
setupFilesAfterEnv: ['<rootDir>/jest.setup.ts'],
Ao fazer isso e executar todos os tests passaram.
Test Suites: 7 passed, 7 total Tests: 12 passed, 12 total Snapshots: 0 total Time: 5.166 s, estimated 10 s
Beleza irmão, muito obrigado!
Vou tentar dessa forma que você me explicou também aqui. Obrigado mesmo!
I try create a test but this error persist. Maybe any incompatibility? ( On Insomnia all works fine.) When I use .get('/products') always returns code 404 page not found.
This is my code: