我正在尝试对 admin-on-rest 所需的模块进行单元测试。我想做的是在发出请求时模拟 getToken 的实现。我正在嘲笑 getToken 的响应以返回一个令牌,以便在调用“默认”时,它应该调用 getToken 它将始终返回一个令牌而不获取。我不能让它为我的生活工作,我想知道我做错了什么。
//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)
})
})