2

I'm trying to unit test a module required by admin-on-rest. What I want to do is to mock the implementation of getToken as it makes an request. I am mocking the response of getToken to return a token so that when the "default" is being called, it should call getToken it will return a token always without fetching. I cannot get this to work for the life of me and am wondering what I am doing wrong.

//authClient.js
import request from 'request'
import { AUTH_LOGIN } from 'admin-on-rest'

export const getToken = (token) => {
    return new Promise((resolve, reject) => {
        let authTokenUrl = 'http://www.mywebsite.com/auth?access_token=' + token
        request.post(authTokenUrl, (err, resp, res) => {
            if (!err && resp.statusCode === 200) {
                return resolve(res)
            } else {
                return reject(err)
            }
        })
    })
}

export default (type, params) => {
  if (type === AUTH_LOGIN) {
      const { token } = params
      return getToken(token).then((res) => {
          storage.setItem('token', JSON.parse(res).token)
          return Promise.resolve(JSON.parse(res))
    }, (err) => {
      return Promise.reject(err)
    })
  }
  return Promise.reject(new Error('Unknown method'))
}


//authClient.test.js

 jest.unmock('../src/authClient.js')
 import { AUTH_LOGIN } from 'admin-on-rest'
 import authClient from '../src/authClient.js'

 const tokenValue = {token: 'my-token'}

 describe('authClient', () => {
   beforeEach(() => {
     authClient.getToken = jest.fn().mockImplementation(() => Promise.resolve(tokenValue))
   })


   it('is setting token', () => {
     let response = authClient(AUTH_LOGIN, tokenValue)
     expect(response.token).toBe(tokenValue.token)
   })
 }) 

0 Answers0