Nock est une bibliothèque de simulation et d’assertions de serveur HTTP pour Node.js qui intercepte les appels réseau sortants via http.request.
Simulation de base (Mocking)
const nock = require('nock');
// Simuler un point de terminaison GET
const scope = nock('https://api.example.com')
.get('/users/1')
.reply(200, {
id: 1,
name: 'Alice Cooper'
});
// Laisser passer les requêtes non simulées vers le réseau réel
const unmockedScope = nock('https://api.example.com', {
allowUnmocked: true
});
Filtrage des requêtes et paramètres Query
Correspondance des paramètres de requête
nock('https://api.example.com')
.get('/search')
.query({ q: 'cheese', page: '1' })
.reply(200, { results: [] });
Filtrage des chemins (masquer les jetons dynamiques)
Retirez les jetons dynamiques ou horodatages avant la comparaison :
nock('https://api.example.com')
.filteringPath(/[&?]token=[^&]*/g, '')
.get('/user')
.reply(200, { authorized: true });
// Intercepte "/user?token=xyz123" comme "/user"
Simuler des requêtes POST et des en-têtes
nock('https://api.example.com')
.matchHeader('authorization', 'Bearer token_123')
.post('/checkout', { items: [1, 2] })
.reply(201, { status: 'created' }, {
'X-Custom-Header': 'MockValue'
});
Assertions et nettoyage
// Vérifier que tous les intercepteurs déclarés ont été appelés
scope.isDone(); // => true / false
// Nettoyer tous les intercepteurs actifs
nock.cleanAll();
// Restaurer le comportement HTTP natif de Node.js
nock.restore();