gpt4 book ai didi

javascript - 如何在 Jest 测试中重新模拟库?

转载 作者:行者123 更新时间:2023-12-03 01:08:38 25 4
gpt4 key购买 nike

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 开头

关于javascript - 如何在 Jest 测试中重新模拟库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52285457/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com