无法用jest模拟ajax请求

时间:2017-06-12 22:25:20

标签: ajax unit-testing reactjs jest admin-on-rest

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

0 个答案:

没有答案