2017-08-01 8 views
1

J'essaie de la fonction simulation du gestionnaire d'itinéraire ...Comment puis-je remplacer le gestionnaire Hapi?

Voici mon itinéraire:

server.route({ 
    method: 'GET', 
    path: '/api/color/{format}', 
    handler: this.pingLogic.getPing, 
    config: { 
    description: 'This is ping route', 
    tags: ['api', 'v1', 'ping route'], 
    validate: { 
     params: pingValidator 
    } 
    } 
}) 

fonction getPing ressemble à ceci:

getPing(req: HapiRequest, reply: Hapi.ReplyNoContinue): any { 
    req.seneca 
    .act(
     { 
     role: 'color', 
     format: req.params.format, 
     color: 'red' 
     }, 
     (err: any, out: any): any => { 
     return reply(err || out) 
     } 
    ) 
} 

Voici mon test:

L.test('returns the hello message as text.', (done) => { 
    const ping = new PingLogic; 
    sinon.stub(ping, 'getPing').returns({}); 
    server.inject('/api/color/hex', (response: any) => { 
    expect(response.payload).to.equal({color: 'green'}); 
    done(); 
    }); 
}); 

Cela ne fonctionne pas, il ne reconnaît pas cette partie: sinon.stub(ping, 'getPing').returns({}); Quelqu'un sait comment faire ce travail?

Répondre

0

Je viens de résoudre ce même problème en utilisant proxyquire sur sinon.

const route = proxyquire('./route', { 
 
    './pingLogic': { 
 
    default: sinon.stub().callsArgWith(1, 'response'), 
 
    }, 
 
}).default; 
 

 
server.route(route); 
 

 
server.inject({ request }) // Calls my stub

Une autre solution pourrait être quelque chose comme ceci:

Dans votre fichier d'itinéraire:

handler: (request, reply) => { this.pingLogic.getPing(request, reply); }

Ensuite, vous pouvez Stu b pingLogic comme d'habitude.

Je pense que c'est parce que hapi enregistre l'objet réel quand vous en avez besoin, et le talonnant après c'est trop tard. Si vous l'intégrez dans une fonction de flèche, Sinon peut remplacer la logique avant que la fonction ne soit liée à l'objet route hapi.