mercredi 8 juin 2016

Chai spies and async calls not call once

I m building an application in which I need to test some callback behaviours inside of an express callback resolution.

Actually, it looks like :

const callbackRender = (httpResponse, response) => {
  console.log(httpResponse) // logs the good httpResponse object
  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) {
      return result.then(res => callbackRender(res, response))
    } else {
      callbackRender(result, response)
    }
  }
}

The two failing tests look like :

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

    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)
      expect(spy).to.have.been.called.once
      mock.verify()
      mock.restore()
    })

It seems that chai-spies isn't able to detect that my callbackRender function is called in the callback method.

The fact is that, when I log my method, I pass inside of it each time I need it to do.

Does anybody has an idea ?

Aucun commentaire:

Enregistrer un commentaire