2

我正在尝试对 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)
   })
 }) 
4

0 回答 0