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