2017-08-01 3 views
1

ich Mock-Funktion von Route-Handler versucht ...Wie kann ich den Hapi-Handler stupsen?

Hier ist meine Route:

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 
    } 
    } 
}) 

getPing Funktion wie folgt aussieht:

:

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) 
     } 
    ) 
} 

Hier ist mein 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(); 
    }); 
}); 

Es funktioniert nicht es nicht diesen Teil erkennen: sinon.stub(ping, 'getPing').returns({}); Wer weiß, wie das funktioniert?

Antwort

0

Ich habe gerade das gleiche Problem mit Proxyquire über Sinon gelöst.

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

 
server.route(route); 
 

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

Eine andere Lösung könnte so etwas wie dieses:

In Ihrer Route-Datei:

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

Dann können Sie stu b pingLogic wie gewohnt.

Ich denke, das liegt daran, Hapi registriert das reale Objekt, wenn Sie es benötigen, und stubbing danach ist zu spät. Wenn Sie es in eine Pfeilfunktion einfügen, kann Sinon die Logik überschreiben, bevor die Funktion an das hapi-Routenobjekt gebunden wird.