gpt4 book ai didi

javascript - 为什么我的 Jest 测试通过,然后调用函数后创建 TypeError

转载 作者:行者123 更新时间:2023-12-03 00:37:55 25 4
gpt4 key购买 nike

Link to repo on GitHub

使用 Jest 编写测试并在测试特定功能时,createDriversRecordsHash ,我可以让测试顺利通过,但随后它返回 TypeError 。该函数采用一串驱动程序作为参数,我看到此错误发生的唯一原因是有人在不传递字符串的情况下调用该函数。

在这里您可以看到测试顺利通过,但测试完成后 createDriversRecordsHash函数被调用但无法读取 splitundefined哪里undefined将是 driverRecordsFileData (论证)。如何防止这种情况发生?

enter image description here

如果我放置 return console.log(driverRecordsFileData)在函数的开头,只是想看看什么driverRecordsFileData然后我得到:

enter image description here

测试

import { createDriversRecordsHash } from './main'

describe('Main.js', () => {
test('createDriversRecordsHash', () => {
let driverRecordsData = 'Driver Dan\n'
driverRecordsData += 'Driver Alex\n'
driverRecordsData += 'Driver Bob\n'
driverRecordsData += 'Trip Dan 07:15 07:45 17.3\n'
driverRecordsData += 'Trip Dan 06:12 06:32 21.8\n'
driverRecordsData += 'Trip Alex 12:01 13:16 42.0'

const hardCodedDriverRecordHash = {
"Alex": {
"__driverName": "Alex",
"__milesPerHour": 34,
"__totalDrivingDistInMiles": 42,
"__totalDrivingTimeInHrs": 1.25,
},
"Bob": {
"__driverName": "Bob",
"__milesPerHour": 0,
"__totalDrivingDistInMiles": 0,
"__totalDrivingTimeInHrs": 0,
},
"Dan": {
"__driverName": "Dan",
"__milesPerHour": 47,
"__totalDrivingDistInMiles": 39,
"__totalDrivingTimeInHrs": 0.833333333333333,
},
}

const driverRecordHash = createDriversRecordsHash(driverRecordsData)
expect(driverRecordHash).toEqual(hardCodedDriverRecordHash)
})
})

正在测试的功能

export function createDriversRecordsHash(driverRecordsFileData) {
return driverRecordsFileData.split('\n').reduce((acc, nxt) => {
nxt = nxt.split(' ')
const [command, driverName, ...rest] = nxt

if (command === 'Driver') {
acc[driverName] = new Driver(driverName)
}
else {
let distInMiles = Math.round(Number(rest[2]))
acc[driverName].setTotalDrivingDistInMiles(distInMiles)
acc[driverName].setTotalDrivingTimeInHrs(rest)
acc[driverName].setMilesPerHour()
}

return acc
}, {})
}

最佳答案

我认为您遇到的问题是,当您从 './main' 导入 { createDriversRecordsHash } 时,它会运行 main.js 中的所有代码作为准备导入的一部分。

因此 getDriverRecords().then(data => console.log(data)) 异步运行,因为 getDriverRecords 返回一个 Promise 并使用 fs.readFile(一个异步函数)。在这种情况下,您尚未通过 CLI 调用它,因此 process.argv[2] 未定义,然后 data 未定义,因此传递了 undefined到第 20 行的 createDriversRecordsHash,然后生成错误。

因为 jest 测试是同步运行的,所以它完成了通过测试,并且只有在 Promise 解析后才会抛出错误。

关于javascript - 为什么我的 Jest 测试通过,然后调用函数后创建 TypeError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53583610/

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