I m trying to use rewire external module to make some test between modules.
Actually, I have these two modules :
import callbackRender from './callbackRender'
import { HttpRequest } from 'default-http'
export default (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 {
callbackRender(result, response)
}
}
}
export default (httpResponse, response) => {
if (httpResponse.content.content) response.send(httpResponse.content.content)
else response.render(httpResponse.content.page)
}
I m trying to test it like following :
import chai from 'chai' import { HttpRequest, HttpResponse } from 'default-http' import UserControllerMock from './UserControllerMock' import expressKonnector from '../app/expressKonnector' import callbackRender from '../app/callbackRender' import rewire from 'rewire' import spies from 'chai-spies' import sinon from 'sinon' import chaiAsPromised from 'chai-as-promised' const expect = chai.expect const callback = rewire('../app/callback') callback.set({ 'callbackRender': callbackRender }) chai.use(spies) chai.use(chaiAsPromised)
/** * Some other working tests ... */
it('should call the callback render method when httpResponse is not a promise', () => {
const mock = sinon.mock(injector)
const ctrl = new UserControllerMock()
const routes = routeParser.parseRoutes()
mock.expects('get').returns(ctrl)
const spy = chai.spy.on(callbackRender)
callback(injector, routes[1])(request, response)
callbackRender({content: {content: 'toto'}}, response)
expect(spy).to.have.been.called.once
mock.verify()
mock.restore()
})
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.on(callbackRender)
callback(injector, routes[3])(request, response).then((res) => {
expect(spy).to.have.been.called.once
mock.verify()
mock.restore()
done()
})
})
I think you got it, I need to spy my callbackRender inside of the callback method. This why, I require the callbackRender module in the callback module and so, I need to rewire it.
I have made the rewiring at the top of the the file like following :
const callback = rewire('../app/callback')
callback.__set__({
'callbackRender': callbackRender
})
But when I run the tests, I have the following error :
Message: callbackRender is not defined Stack: ReferenceError: callbackRender is not defined at Function.eval (eval at set (C:\Project\javascript\express-konnector\src\app\callback.js:75:19), :1:16) at Function.set (C:\Project\javascript\express-konnector\src\app\callback.js:75:5) at Object. (C:/Project/javascript/express-konnector/src/test/expressKonnector.spec.js:12:10)
Aucun commentaire:
Enregistrer un commentaire