使用 Jest + React 测试库从函数中测试 return 值的最佳实践
Best practice testing return value from a function with Jest + React Testing Library
我有一个非常简单的工资计算器函数,它接收表单内的输入值作为参数,最后 returns 计算结果。
逻辑函数
export function calcAnnualSalary(
monthlySalary: string,
healthPlan?: string,
transpostationTicket?: string,
mealTicket?: string,
valueSaturday?: boolean
) {
const annualSalary =
parseFloat(monthlySalary.replace(/\./g, '').replace(',', '.')) * 12
const thirteenth = parseFloat(
monthlySalary.replace(/\./g, '').replace(',', '.')
)
const extraHoliday =
parseFloat(monthlySalary.replace(/\./g, '').replace(',', '.')) / 3
const totalAnnualCrude = annualSalary + thirteenth + extraHoliday
return {
annualSalary,
thirteenth,
extraHoliday,
totalAnnualCrude,
}
}
测试
据此,我用硬编码值创建了一个非常简单的测试,我想知道这是否是测试函数计算逻辑的最佳实践。例如,为了避免硬编码,我应该在表单中获取值,它有什么建议?
import {CalcAnnualSalary} from '~src/components/app/Calculators/CalcAnnualSalary'
import * as Calc from '~src/utils/calculators/'
import * as Lib from '~src/utils/testing-library'
describe('CalculatorAnnualSalary', () => {
it('expect return gross annual salary', () => {
const {annualSalary} = Calc.calcAnnualSalary('1.000,00')
expect(annualSalary).toEqual(12000)
})
})
在测试中,您应尽可能简单地提供测试替身和测试数据。这降低了复杂性并促进了测试。
无论您使用静态数据还是动态生成的测试数据,都要保持简单。通过简单的测试数据,你也可以更容易地预测出想要的结果。
测试是可预测的,在写测试用例的时候,你应该在运行测试用例之前提供你想要的结果,如果你的输入很复杂,想要的结果很难计算,你需要执行用这些数据在你的大脑中编码。
使用简单的测试数据来测试每个代码分支,一个函数的逻辑片段。
我有一个非常简单的工资计算器函数,它接收表单内的输入值作为参数,最后 returns 计算结果。
逻辑函数
export function calcAnnualSalary(
monthlySalary: string,
healthPlan?: string,
transpostationTicket?: string,
mealTicket?: string,
valueSaturday?: boolean
) {
const annualSalary =
parseFloat(monthlySalary.replace(/\./g, '').replace(',', '.')) * 12
const thirteenth = parseFloat(
monthlySalary.replace(/\./g, '').replace(',', '.')
)
const extraHoliday =
parseFloat(monthlySalary.replace(/\./g, '').replace(',', '.')) / 3
const totalAnnualCrude = annualSalary + thirteenth + extraHoliday
return {
annualSalary,
thirteenth,
extraHoliday,
totalAnnualCrude,
}
}
测试
据此,我用硬编码值创建了一个非常简单的测试,我想知道这是否是测试函数计算逻辑的最佳实践。例如,为了避免硬编码,我应该在表单中获取值,它有什么建议?
import {CalcAnnualSalary} from '~src/components/app/Calculators/CalcAnnualSalary'
import * as Calc from '~src/utils/calculators/'
import * as Lib from '~src/utils/testing-library'
describe('CalculatorAnnualSalary', () => {
it('expect return gross annual salary', () => {
const {annualSalary} = Calc.calcAnnualSalary('1.000,00')
expect(annualSalary).toEqual(12000)
})
})
在测试中,您应尽可能简单地提供测试替身和测试数据。这降低了复杂性并促进了测试。
无论您使用静态数据还是动态生成的测试数据,都要保持简单。通过简单的测试数据,你也可以更容易地预测出想要的结果。
测试是可预测的,在写测试用例的时候,你应该在运行测试用例之前提供你想要的结果,如果你的输入很复杂,想要的结果很难计算,你需要执行用这些数据在你的大脑中编码。
使用简单的测试数据来测试每个代码分支,一个函数的逻辑片段。