Ссылка на репо на GitHub
Написание тестов с использованием Jest и при тестировании определенной функции, createDriversRecordsHash
, я могу заставить тест пройти без проблем, но затем он возвращается сTypeError
.Функция принимает в качестве аргумента строку драйверов, и единственная причина, по которой я вижу эту ошибку, заключается в том, что кто-то должен был вызвать функцию без передачи строки.
Здесь вы можете видеть, что тест проходит нормально, но послетесты завершают вызов функции createDriversRecordsHash
, и она не может прочитать split
из undefined
, где undefined
будет driverRecordsFileData
(аргумент).Как я могу предотвратить это?
Если я поставлю return console.log(driverRecordsFileData)
в начале функции, просто чтобы посмотреть, что driverRecordsFileData
тогда я получаю:
Тест
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
}, {})
}