Невозможно сопоставить ошибку с броском во время теста с цепью - PullRequest
0 голосов
/ 16 февраля 2019

Я пытаюсь написать контрольный пример, который ловит ошибку «Ошибка: укажите pitchWidth и pitchHeight».Но я не могу рассчитывать на ожидание броска в качестве успешного теста.

Код:

mocha.describe('testValidationOfBadInputData()', function() {
mocha.it('init game fails on pitch height', async() => {
  let t1location = './init_config/team1.json'
  let t2location = './init_config/team2.json'
  let plocation = './test/input/badInput/badPitchHeight.json'
  // let badFn = await validation.initGame(t1location, t2location, plocation)

  expect(await validation.initGame(t1location, t2location, plocation)).to.throw()
}) })

Вывод:

1) testValidationOfBadInputData()
       init game fails on pitch height:
     Error: Please provide pitchWidth and pitchHeight
      at Object.validatePitch (lib/validate.js:56:11)
      at Object.initiateGame (engine.js:18:12)
      at Object.initGame (test/lib/validate_tests.js:9:29)       

Другие попытки также потерпели неудачу:

1)

expect(await validation.initGame(t1location, t2location, plocation)).to.throw(Error, 'Please provide pitchWidth and pitchHeight');

2)

expect(await validation.initGame.bind(t1location, t2location, plocation)).to.throw();

Не уверен, что я делаю неправильно, и документация не кажетсяочевидно.https://www.chaijs.com/api/bdd/#method_throw

async function initGame(t1, t2, p) {       
  let team1 = await common.readFile(t1)       
  let team2 = await common.readFile(t2)       
  let pitch = await common.readFile(p)       
  let matchSetup = engine.initiateGame(team1, team2, pitch)     
 return matchSetup  
}

выше - функция, которую я вызываю.

Ответы [ 2 ]

0 голосов
/ 18 февраля 2019

Мне удалось создать правильные тесты, выполнив следующие действия:

 mocha.describe('testValidationOfBadInputData()', function() {
    mocha.it('init game fails on pitch height', async() => {
      let t1location = './init_config/team1.json'
      let t2location = './init_config/team2.json'
      let plocation = './test/input/badInput/badPitchHeight.json'
      try{
        await validation.initGame(t1location, t2location, plocation); 
      }catch(err){
        expect(err).to.be.an('Error');
        expect(err.toString()).to.have.string('Error: Please provide pitchWidth and pitchHeight')
      }
    })
  })

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

UnhandledPromiseRejectionWarning: Ошибка: пожалуйста, предоставьте pitchWidth и pitchHeight

Что заставило меня задуматься надэто в блок try catch и затем обрабатывает ошибку, которую мы получаем

В блоке перехвата;

  1. Ожидается, что на выходе будет ошибка

    Ожидайте (err) .to.be.an ('Ошибка'));

  2. Сопоставить строковую версию ошибки с ожидаемым выводом

    Ожидается (err.toString ()). To.have.string ('Ошибка: мояerror ')

Возможно, это не лучшее решение.Рад принять другие ответы.

0 голосов
/ 18 февраля 2019

Я думаю, что это похоже на проблему, с которой я столкнулся вчера, и соответствует этому вопросу: Полностью ли сломан assert.throws узла?

Функция выполняется в стеке перед передачейожидать ().

Вместо этого попробуйте

expect(function() { await validation.initGame(t1location, t2location, plocation); }).to.throw()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...