| name | paystack-node-transport-testing |
| description | Use when testing or customizing Paystack Node SDK transport behavior with custom fetch, baseUrl, timeouts, retries, mocked responses, or local Paystack API proxies. |
| license | MIT |
| compatibility | Node.js >=22.0.0; ESM-only package; backend/server runtime; imports @alexasomba/paystack-node. |
Paystack Node Transport and Testing
The Node SDK accepts a custom fetch, baseUrl, headers, timeout, retry, and idempotency options through createPaystack.
Custom fetch
Use fetch injection for tests, tracing, local proxies, or controlled network behavior.
const calls: RequestInfo[] = [];
const paystack = createPaystack({
secretKey: "sk_test_123",
fetch: async (input, init) => {
calls.push(input);
return Response.json({
status: true,
message: "OK",
data: { reference: "ref_123" },
});
},
});
The SDK wraps the provided fetch to apply timeout, retry, and idempotency behavior before requests reach OpenAPI helpers.
Mocking response envelopes
Return Paystack-style envelopes from tests:
return Response.json(
{ status: false, message: "Invalid reference", data: null },
{ status: 200, headers: { "x-paystack-request-id": "req_123" } },
);
Use PaystackResponse.unwrap() or assertOk patterns from the response/error skill when asserting failures.
Local base URL
Use baseUrl for local integration tests or a controlled proxy only.
const paystack = createPaystack({
secretKey: "sk_test_123",
baseUrl: "http://127.0.0.1:8787",
});
Best practices
- Do not mock only raw
data; include Paystack's status, message, and data envelope.
- Assert authorization and idempotency headers in transport tests.
- Test retries with reusable request bodies; streams may not be retryable.
- Use fake timers or low retry delays when testing retry behavior.