I m building an application in which I need to test that a callbackfunction has been called in promise resolution.
Actually, I have the following 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)
}
}
}
I need to test that the
result.then(res => {
console.log('hey I m in !')
callbackRender(res, response)
})
is well called.
I have written this test using mocha and chai, and I m always having 0 time spy calls :
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 : The log message in the promise resolve part if well called, and I can display it on the screen.
Any idea ?
Return your response, then you can call then
in your test.
const callback = (injector, route) => {
return (request, response) => {
const ctrl = injector.get(route.controller)
const result = ctrl[route.controllerMethod](new HttpRequest())
if (result.then) {
return result.then(res => {
callbackRender(res, response)
});
} else {
return Promise.resolve(callbackRender(result, response));
}
}
}
Your test:
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).then(() => {
expect(spy).to.have.been.called.once
mock.verify()
mock.restore()
done()
});
});
Although, you don't seem to be injecting callbackRender, so your spy might still not get called.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.