使用Jest + React测试库测试实用程序函数的最佳方法



我有这个函数,我希望返回添加了参数的url

export const addParamsToURL = (
params: param | param[],
url?: string
): string => {
if (!url) return ''
const __url = new URL(url)
const __params = new URLSearchParams(__url.search)
if (params instanceof Array) {
params.map(({key, value}) => __params.append(key, value))
} else {
__params.append(params.key, params.value)
}
return `${__url.origin}${__url.pathname}?${__params}`
}

我创建了下面的场景测试,我想知道我是否应该为它做一个模拟,什么是最好的方法。我真的需要嘲笑吗?笑话。fn, jest.mock ?我对测试还是很陌生的

import {addParamsToURL} from '../../src/utils/addParamsToURL'

const baseURL = 'https://www.idinheiro.com.br'
const singleParam = {key: 'a', value: 'b'}
const multipleParams = [
{key: 'a', value: 'b'},
{key: 'c', value: 'd'},
]

describe('AddParamsToURL input a base url and params returns the full URL', () => {
it('Should return "" if not given a url', () => {
const res = addParamsToURL(singleParam, undefined)
expect(res).toBe('')
})

it('Should return the full url if given a simple param', () => {
const res = addParamsToURL(singleParam, baseURL)
expect(res).toBe('https://www.idinheiro.com.br/?a=b')
})
})

此实用函数与Reactjs和react-testing-library无关。您不需要模拟对象来测试这个函数。这个函数是纯粹的,你的测试方法是正确的。

一些常见的场景模拟是有用的:

  • 真实对象具有不确定性行为
  • 真实对象设置比较复杂
  • 真实对象具有难以触发的行为
  • 真实对象慢
  • 真实对象是一个用户界面
  • 真实对象使用回调
  • 实际对象还不存在

另请参见何时应该mock?

最新更新