🔁 Start Service
Execute seus serviços em um processo em segundo plano e teste-os 🧑🏻🔬
startService(caminhoDoArquivo: string, opções?: StartServiceOptions);
O startService
executa um arquivo diretamente e mantém-o em execução em um processo em segundo plano até que você o libere.
O Poku permite que você utilize o cliente HTTP que quiser, como o Axios, o fetch nativo e outros ✨
não é necessário exportar seu app, server ou qualquer serviço, basta executá-lo como está 🚀
Pare de alterar seu código devido às regras do teste, você criou seu código, não o Poku 🩵
Veja exemplos práticos usando fetch, Axios, uma sessão persistente e mais.
Boas Práticas 👮🏽
✅ Sinalize o status "ready"
Quando possível, defina uma saída do console para indicar que o serviço está pronto.
Isso irá permitir que você evite execuções prematuras e vazamentos de porta.
✅ Defina um tempo limite
Definindo um tempo limite, você evita processos indefinidos que não concluem nem com sucesso nem com falha.
✅ Encerre seu serviço quando o trabalho estiver concluído
Você não precisa necessariamente encerrar seu serviço em segundo plano como a última linha do teste, se ele não estiver mais em uso.
import { startService } from 'poku';
const server = await startService('server.js', {
/**
* Espere pelo "ready" na saída do console
*/
startAfter: 'ready',
/**
* Por padrão, o `timeout` é `60000` (1 minuto) tanto para sucesso quanto para falha
*/
timeout: 60000,
});
await server.end();
Você pode passar uma porta para end
para forçar o término do subprocesso em segundo plano para o Bun e o Deno.
ℹ️ Para usar a porta em end
, você irá precisar do lsof
para Unix ou netstat
para Windows.
Se você estiver enfrentando problemas ao usar esse recurso com o Bun, consulte oven-sh/bun#11055 ao usar o método end
passando uma porta ou oven-sh/bun#7441 para subprocessos não concluídos.
Oh não! Eu quebrei, e agora? 🤡
Liberação de uma porta que está vazando:
lsof -i :PORT
- Substitua
PORT
pelo número da porta que você está investigando.
Em seguida, use o PID
retornado com o comando kill
:
kill -9 PID
- Substitua
PID
pelo ID do processo atual que você encontrou usando o comandolsof
.
Opções Disponíveis
type StartServiceOptions = {
/**
* - Por padrão, será resolvido na primeira saída do console
* - Definindo uma string: ele aguardará uma string específica na saída do console para resolver
* - Definindo um número: ele aguardará o tempo em milissegundos para resolver
*
* ---
*
* ℹ️ `startAfter` é sensível a maiúsculas e minúsculas.
*
* ---
*
* @default undefined
*/
startAfter?: string | number;
/**
* Encerra o serviço sem sucesso nem falha após:
* @default 60000
*/
timeout?: number;
/**
* Exibe a saída do serviço
*/
verbose?: boolean;
/**
* Especifica um caminho de destino para iniciar o processo
*
* @default "./"
*/
cwd?: string | undefined;
/**
* Por padrão, o Poku tentará identificar a plataforma atual, mas você pode especificá-la manualmente
*/
platform?: 'node' | 'bun' | 'deno';
};
type End = (port?: number | number[]) => Promise<void>;