UNPKG

lightweight-api-rate-limiter

Version:

A robust, framework-agnostic rate limiter for Node.js applications, built for scalability and ease of use

43 lines (37 loc) 1.28 kB
const rateLimiter = require('../src/index'); const MemoryStore = require('../src/stores/memory'); describe('Rate Limiter', () => { let req, res, next; beforeEach(() => { req = { ip: '192.168.1.1' }; res = { status: jest.fn().mockReturnThis(), send: jest.fn(), set: jest.fn(), }; next = jest.fn(); }); test('allows requests under limit', async () => { const limiter = rateLimiter({ max: 2, windowMs: 1000 }); await limiter(req, res, next); expect(next).toHaveBeenCalled(); }); test('blocks requests over limit', async () => { const limiter = rateLimiter({ max: 1, windowMs: 1000 }); await limiter(req, res, next); await limiter(req, res, next); expect(res.status).toHaveBeenCalledWith(429); }); test('token bucket mode', async () => { const limiter = rateLimiter({ useTokenBucket: true, tokensPerInterval: 1, intervalMs: 1000 }); await limiter(req, res, next); await limiter(req, res, next); expect(res.status).toHaveBeenCalledWith(429); }); test('metrics tracking', async () => { const limiter = rateLimiter({ max: 2, metrics: true }); await limiter(req, res, next); const stats = limiter.getMetrics(); expect(stats['192.168.1.1'].requests).toBe(1); }); });