Неопределенное свойство при модульном тестировании моего бота discord.js (сам тест пройден, но за ним следует ошибка) - PullRequest
0 голосов
/ 13 июня 2019

Я пытаюсь настроить модульное тестирование для своего бота discord.js, но при запуске npm test в терминале во время прохождения теста все равно выдает ошибку.

Это изображениетеста, за которым следует ошибка: https://i.imgur.com/m2EOuxc.png

Мне нужно исправить эту ошибку при тестировании, при этом бот остается в состоянии функционировать.

Я попытался полностью удалитьстрока, указанная в ошибке (и строки, имеющие отношение к этой конкретной строке)

  jsfiles.forEach((f, i) => {
    let props = require(`./cmds/${f}`)
    bot.commands.set(props.help.name, props)
  })

Устранение этой проблемы решило проблему тестирования, но привело к тому, что бот не работал правильно (он не загружалкоманды, то есть бот не может взаимодействовать с), что здесь не является целью.

Я также проверил, что каждый из файлов в папке cmds заканчивается

module.exports.help = {
  name: '<name of the command I use for each command>'
} 

Это часть моего bot.js файла, который содержит проблему.

// Loads the commands for the bot:
fs.readdir('./cmds/', (err, files) => {
  if (err) console.error(err)

  let jsfiles = files.filter(f => f.split('.').pop() === 'js')
  if (jsfiles.length <= 0) {
    console.log('No commands to load!')
    return
  }

  if (testingSettings) {
    console.log(`Loading ${jsfiles.length} commands!`)
  }

  // This is the problem referenced above: 
  // ----------------------------------------------------------------------
  jsfiles.forEach((f, i) => {
    let props = require(`./cmds/${f}`)
    bot.commands.set(props.help.name, props)
  })
  // ----------------------------------------------------------------------

})

Это весь мой код в bot.test.js файле

const { 
  // Functions
  checkingTesting,

  // Variables
  testingSettings,
} = require('./bot')


test('checking to see if testing-mode is on', () => {
  expect(checkingTesting(testingSettings, 'token')).toBe(process.env['token']);
});

Если это необходимо.Это функция, переменная и метод экспорта, которые используются для подключения bot.js к bot.test.js:

Переменная (в файле bot.js)

const testingSettings = false

Функция (в * 1034)* файл)

function checkingTesting (testingSettings, name) {
  if (testingSettings) {
    return testSettings[name]
  } else if (!testingSettings) {
    return process.env[name]
  }  
}

Экспорт (в bot.js файл)

module.exports = {
  // Exporting functions
  checkingTesting: checkingTesting,


  // Exporting variables
  testingSettings: testingSettings,
}

Ответы [ 2 ]

1 голос
/ 13 июня 2019

В вашем командном файле, похоже, нет help свойства module.exports.Когда вы пытаетесь прочитать help.name, выдается ошибка, поскольку help не определено.

Убедитесь, что вы объявляете module.exports.help в каждом командном файле.

0 голосов
/ 13 июня 2019

props.help не определено.Экспортированный объект необходимого файла либо пуст, не имеет help или какого-либо другого непредвиденного события.

Рекомендуется всегда проверять, существует ли ключ объекта перед его использованием.

if (props && props.help) {
    bot.commands.set(props.help.name, props)
} else {
    //throw or handle error here
}
...