Ich baue eine Anwendung, in der ich testen muss, dass eine Callback-Funktion in der Auflösung des Versprechens aufgerufen wurde.Testen Sie, dass eine Funktion in einer Verheißungsauflösung aufgerufen wird
Eigentlich habe ich den folgenden Code:
const callbackRender = (httpResponse, response) => {
if (httpResponse.content.content) response.send(httpResponse.content.content)
else response.render(httpResponse.content.page)
}
const callback = (injector, route) => {
return (request, response) => {
const ctrl = injector.get(route.controller)
const result = ctrl[route.controllerMethod](new HttpRequest())
if (result.then) {
result.then(res => {
console.log('hey I m in !')
callbackRender(res, response)
})
} else {
callbackRender(result, response)
}
}
}
ich, dass die
result.then(res => {
console.log('hey I m in !')
callbackRender(res, response)
})
gut testen müssen aufgerufen.
Ich habe diesen Test geschrieben mit Mokka und chai, und ich bin mit immer 0 Mal Spion Anrufe:
it('should call the callback render method when httpResponse is a promise', (done) => {
const mock = sinon.mock(injector)
const ctrl = new UserControllerMock()
const routes = routeParser.parseRoutes()
mock.expects('get').returns(ctrl)
const spy = chai.spy(callbackRender)
callback(injector, routes[3])(request, response)
setTimeout(() => {
expect(spy).to.have.been.called.once
mock.verify()
mock.restore()
done()
}, 0)
})
NB: Die Log-Nachricht in dem Teil Versprechen lösen, wenn auch genannt wird, und ich kann es angezeigt werden auf dem Bildschirm.
Irgendeine Idee?
Asynchroner Code muss asynchron getestet werden. –
Genau was ich mit setTimeout gemacht habe: o – mfrachet
Nicht ganz ... 'setTimeout' wird dir hier nicht helfen (zumindest nicht vorhersehbar). Ihr Test muss [auf das aufgelöste Versprechen warten] (http://chaijs.com/plugins/chai-as-promised/), bevor er seine 'expect'-Anweisung überprüft. –