2015-07-19 1 views
2

J'essaye d'utiliser nock pour exécuter backtests sur le code écrit contre l'API de trading d'Oanda. Pour ce faire, j'ai besoin de simuler l'API de prix de streaming (voir Tarifs Streaming au http://developer.oanda.com/rest-practice/streaming/). Cependant, il semble que nock ne vous permette de répondre qu'avec une seule réponse, même si la réponse est un flux. Est-il possible d'envoyer un flux de milliers d'événements de prix en tant que réponses individuelles à une seule demande?Simuler un socket web ouvert avec nock

var scopeStream = nock('https://stream-fxpractice.oanda.com') 
    .persist() 
    .filteringPath(function(path) { 
    return '/stream'; 
    }) 
    .get('/stream') 
    .reply(function(uri, requestBody) { 
    return [200, {"tick":{"instrument":"AUD_CAD","time":"2014-01-30T20:47:08.066398Z","bid":0.98114,"ask":0.98139}}] 
    }) 
+0

Crickets :-(Pas d'idées? – greymatter

Répondre

1

Selon cette Nock documentation vous pouvez retourner un ReadStream dans votre réponse.

J'ai utilisé le paquet stream-spigot de NPM pour arriver à l'exemple suivant (utilisé pour simuler un flux d'événements Marathon):

const nock = require('nock'); 

const EventSource = require('eventsource'); 
const spigot = require('stream-spigot'); 

let i = 0; 

nock('http://marathon.com') 
     .get('/events') 
     .reply(200, (uri, req) => { 
      // reply with a stream 
      return spigot({objectMode: true}, function() { 
       const self = this; 
       if (++i < 5) 
        setTimeout(() => this.push(`id: ${i}\ndata: foo\n\n`), 1000); 
      }) 
     }); 

const es = new EventSource('http://marathon.com/events'); 

es.onmessage = m => console.log(m); 

es.onerror = e => console.log(e);