Το Nock είναι μια βιβλιοθήκη προσομοίωσης (mocking) και προσδοκιών διακομιστή HTTP για το Node.js, που παρεμβαίνει στις εξερχόμενες κλήσεις δικτύου μέσω http.request.
Βασικό Mocking
const nock = require('nock');
// Προσομοίωση endpoint GET
const scope = nock('https://api.example.com')
.get('/users/1')
.reply(200, {
id: 1,
name: 'Alice Cooper'
});
// Επίτρεψε στα μη-προσομοιωμένα αιτήματα να περάσουν στο πραγματικό δίκτυο
const unmockedScope = nock('https://api.example.com', {
allowUnmocked: true
});
Φιλτράρισμα Αιτημάτων & Ταίριασμα Query
Ταίριασμα Παραμέτρων Query
nock('https://api.example.com')
.get('/search')
.query({ q: 'cheese', page: '1' })
.reply(200, { results: [] });
Φιλτράρισμα Διαδρομών (Απόκρυψη Δυναμικών Tokens)
Αφαιρέστε δυναμικά tokens ή χρονοσφραγίδες πριν από το ταίριασμα:
nock('https://api.example.com')
.filteringPath(/[&?]token=[^&]*/g, '')
.get('/user')
.reply(200, { authorized: true });
// Παρεμβαίνει στο "/user?token=xyz123" ως "/user"
Προσομοίωση Αιτημάτων POST & Κεφαλίδων
nock('https://api.example.com')
.matchHeader('authorization', 'Bearer token_123')
.post('/checkout', { items: [1, 2] })
.reply(201, { status: 'created' }, {
'X-Custom-Header': 'MockValue'
});
Επαληθεύσεις & Καθαρισμός
// Επιβεβαίωση ότι κλήθηκαν όλοι οι δηλωμένοι παρεμβολείς (interceptors)
scope.isDone(); // => true / false
// Καθαρισμός όλων των ενεργών παρεμβολέων
nock.cleanAll();
// Επαναφορά αρχικής συμπεριφοράς HTTP του Node.js
nock.restore();