-
Notifications
You must be signed in to change notification settings - Fork 498
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Baixa performance nos testes causada pelo banco de dados (sugestão) #51
Comments
Bem interessante amigo. Assim que der irei analisar seu código. Obrigado
pela dica!
On Fri, 29 Oct 2021 at 02:38 Christian Gama ***@***.***> wrote:
Salve.
Notei que todo teste faz uma nova conexão ao banco de dados e logo em
seguida desconecta. Eu estava fazendo exatamente dessa forma em um projeto
pessoal meu que tem bastante teste. Os testes de integração levavam cerca
de 2 minutos para concluir.
Para contornar esse problema, criei um arquivo integration.test.ts que faz
uma leitura de todos os testes de integração (que são os que têm conexão ao
banco de dados) e encapsulei todos os testes dentro desse arquivo. Nos
testes eu exportei os blocos de describe em export default (): void =>
{describe...)
O resultado foi impressionante, caiu de 2 minutos para apenas 21
segundos!! A alta performance se dá por conta de apenas uma conexão ao
banco de dados, ao invés de se conectar/desconectar em cada teste.
const tests = glob
.sync(`${resolve(__dirname)}/**/*.ts`)
.map((content) => {
if (content.match(/\.(test)\.ts$/) && !content.match(/integration\.test\.ts$/)) {
return require(content)
} else return null
})
.filter((content: any) => content != null)
describe('integration tests', () => {
afterAll(async () => {
const client = makeMongoDb()
await client.disconnect()
})
beforeAll(async () => {
await MongoAdapter.connect(global.__MONGO_URI__)
})
tests.forEach((test) => test.default())
})
—
You are receiving this because you are subscribed to this thread.
Reply to this email directly, view it on GitHub
<#51>, or unsubscribe
<https://github.com/notifications/unsubscribe-auth/ABDASG65WWIQHDIO6B7457TUJIXNPANCNFSM5G6PP66Q>
.
Triage notifications on the go with GitHub Mobile for iOS
<https://apps.apple.com/app/apple-store/id1477376905?ct=notification-email&mt=8&pt=524675>
or Android
<https://play.google.com/store/apps/details?id=com.github.android&referrer=utm_campaign%3Dnotification-email%26utm_medium%3Demail%26utm_source%3Dgithub>.
--
Rodrigo Manguinho
|
Se não estivéssemos usando Typescript, daria para usarmos o setupFile do jest, onde ele roda algo antes de todos os testes. Mas por limitação deles, o setupFile roda antes de transpilar para o Typescript, aí dá erro. Essa foi a melhor solução que encontrei até agora. Me avise se encontrar uma solução melhor, por favor. 😄 Só uma observação, pois talvez aconteça com você. Os testes das factories não podem estar junto com esse arquivo, pois eles mockam as validações e bugam tudo. Não soube como resetar o mock, então preferi deixar rodando de forma separada os testes das factories. |
Beleza!
On Fri, 29 Oct 2021 at 11:15 Christian Gama ***@***.***> wrote:
Se não estivéssemos usando Typescript, daria para usarmos o setupFile do
jest, onde ele roda algo antes de todos os testes. Mas por limitação deles,
o setupFile roda antes de transpilar para o Typescript, aí dá erro. Essa
foi a melhor solução que encontrei até agora. Me avise se encontrar uma
solução melhor, por favor. 😄
—
You are receiving this because you commented.
Reply to this email directly, view it on GitHub
<#51 (comment)>,
or unsubscribe
<https://github.com/notifications/unsubscribe-auth/ABDASG4DU7HYLPXLYOGD4V3UJKT7HANCNFSM5G6PP66Q>
.
Triage notifications on the go with GitHub Mobile for iOS
<https://apps.apple.com/app/apple-store/id1477376905?ct=notification-email&mt=8&pt=524675>
or Android
<https://play.google.com/store/apps/details?id=com.github.android&referrer=utm_campaign%3Dnotification-email%26utm_medium%3Demail%26utm_source%3Dgithub>.
--
Rodrigo Manguinho
|
Salve.
Notei que todo teste faz uma nova conexão ao banco de dados e logo em seguida desconecta. Eu estava fazendo exatamente dessa forma em um projeto pessoal meu que tem bastante teste. Os testes de integração levavam cerca de 2 minutos para concluir.
Para contornar esse problema, criei um arquivo integration.test.ts que faz uma leitura de todos os testes de integração (que são os que têm conexão ao banco de dados) e encapsulei todos os testes dentro desse arquivo. Só certifique-se de rodar apenas o
integration.test.ts
.O resultado foi impressionante, caiu de 2 minutos para apenas 21 segundos!! A alta performance se dá por conta de apenas uma conexão ao banco de dados, ao invés de se conectar/desconectar em cada teste.
Caso eu queira rodar apenas um teste, ao invés de ter que rodar todos, fiz uma verificação antes em cada teste, pois assim torna os testes flexíveis. Dessa forma posso depurar apenas um teste, caso seja necessário.
Conectando/desconectando em cada teste (a forma que tava antes):
Conectando/desconectando apenas uma vez antes de todos os testes:
The text was updated successfully, but these errors were encountered: