Nock är ett bibliotek för HTTP-servermockning och förväntningar i Node.js som fångar upp utgående nätverksanrop via http.request.
Grundläggande mockning
const nock = require('nock');
// Mocka en GET-ändpunkt
const scope = nock('https://api.example.com')
.get('/users/1')
.reply(200, {
id: 1,
name: 'Alice Cooper'
});
// Tillåt omockade förfrågningar att gå vidare till det riktiga nätverket
const unmockedScope = nock('https://api.example.com', {
allowUnmocked: true
});
Förfrågningsfiltrering & Query-matchning
Matcha Query-parametrar
nock('https://api.example.com')
.get('/search')
.query({ q: 'cheese', page: '1' })
.reply(200, { results: [] });
Filtrera sökvägar (maskera dynamiska tokens)
Ta bort dynamiska tokens eller tidsstämplar före matchning:
nock('https://api.example.com')
.filteringPath(/[&?]token=[^&]*/g, '')
.get('/user')
.reply(200, { authorized: true });
// Fångar upp "/user?token=xyz123" som "/user"
Mocka POST-förfrågningar & Headers
nock('https://api.example.com')
.matchHeader('authorization', 'Bearer token_123')
.post('/checkout', { items: [1, 2] })
.reply(201, { status: 'created' }, {
'X-Custom-Header': 'MockValue'
});
Assertions & Rensning
// Verifiera att alla deklarerade interceptors anropades
scope.isDone(); // => true / false
// Rensa alla aktiva interceptors
nock.cleanAll();
// Återställ Node.js ursprungliga HTTP-beteende
nock.restore();