Pular para o conteúdo principal
Versão: v2.x.x

🔁 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.

Permite que cookies persistam (ou não) 🍪

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();
dica

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.

info

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 comando lsof.

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>;