Funzione di avvolgimento nelle chiusure per eseguire funzioni testabili

2

Nel mio progetto nodejs, ho funzioni come questa per socketio.

socket.on('draw', function (data) {
    socket.broadcast.to(socket.room).emit('draw', data);
    addEvent(socket, ["draw", data]);
});

Mi piacerebbe riscriverli a qualcosa di simile:

function onDraw(socket, config) {
    return function (data) {
        socket.broadcast.to(socket.room).emit('draw', data);
        addEvent(socket, ["draw", data]);
    }
}

socket.on('draw', onDraw(socket, config));

L'idea è che inserendo tutte le mie funzioni in semplici chiusure come questa, posso inserirle in moduli diversi e renderà più facile il test passando gli oggetti mockup alla funzione che costruisce il callback.

Mi chiedevo se fosse eccessivo o se esistesse un modo migliore per rendere il mio codice testabile?

    
posta Loïc Faure-Lacroix 29.06.2014 - 13:59
fonte

1 risposta

3

IMHO non è eccessivo, è solo la forma javascript (o funzionale) del pattern di comando, usata insieme all'iniezione delle dipendenze.

Il classico equivalente OO per ottenere lo stesso è costruire una classe di comando, passare socket e config attraverso il costruttore, memorizzarli in alcune variabili membro e aggiungere una funzione membro come Draw(data) usando quel membro variabili. Ciò si tradurrebbe in un codice molto più generico, mentre il tuo esempio è molto conciso rispetto alla versione OO.

    
risposta data 30.06.2014 - 10:18
fonte

Leggi altre domande sui tag