簡體   English   中英

如何在玩笑測試中模擬lib?

[英]How to remock libs in jest test?

jest.mock('../redux/storeConfigure', () => () => ({
  getState: () => ({ auth: { token: 'TEST_TOKEN' } })
}))

import { prepareRequestHeaders } from './fetch'

describe('prepareRequestHeaders', () => {
  it('returns header with Authorization if token is set', () => {
    expect(prepareRequestHeaders()['Authorization']).toBe('Bearer TEST_TOKEN')
  })

  it('returns header without Authorization if token is not set', () => {
    ?????
  })
})

prepareRequestHeaders我導入../redux/storeConfigure

如何與其他實現重新模擬../redux/storeConfigure

編輯:

/* fetch.js */
import { store } from '../app'

export const prepareRequestHeaders = () => {
  const headers = {
    Accept: 'application/json',
    'Content-Type': 'application/json'
  }

  const { token } = store.getState().auth
  if (token) {
    headers['Authorization'] = `Bearer ${token}`
  }

  return headers
}

/* app.js */

import storeConfigure from './redux/storeConfigure'

export const store = storeConfigure()

/* Directories strucutre */
- redux
  - storeConfigure.js
- api
  - fetch.js
  - api.test.js
app.js

這樣的事情應該可以解決:

let mockGetState;

jest.mock('../redux/storeConfigure', () => () => {
  mockGetState = jest.fn().mockReturnValue({ auth: { token: 'TEST_TOKEN' } })
  return { getState: mockGetState }
})

import { prepareRequestHeaders } from './fetch'

describe('prepareRequestHeaders', () => {
  it('returns header with Authorization if token is set', () => {
    expect(prepareRequestHeaders()['Authorization']).toBe('Bearer TEST_TOKEN')
  })

  it('returns header without Authorization if token is not set', () => {
    mockGetState.mockReturnValueOnce({auth: {token: 'SOMETHING_ELSE'}})
    // make your assertion
  })
})

當您分配給Jest模擬( jest.fn() )時,您可以隨時更改其返回值。 由於模擬吊裝,它的名稱必須以mock開始

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM