тестирование блока улова с помощью шутки - PullRequest
0 голосов
/ 20 марта 2019

как я могу проверить блок catch в приведенном ниже фрагменте кода, где я использую класс

// Sample.js

class Sample{
 constructor(data){
  this.resolvedData = this.retrieveData(data) 
 }

 retrieveData(data){
   try{
     const resolvedData = data.map(o => o.name);
  }catch(error){
    throw error
  }
 }

}

// Sample.test.js

const Sample = require('./Sample');


describe('Sample File test cases', () => {
    test('should return the resolvedData', () => {
        const resolvedSample = [{name: "John", id: 123}, {name: "Doe", id: 3432}]
        const model = new Sample(resolvedSample);
        const expectedResolvedSample = [{name: "John"}, {name: "Doe"}]
        expect(model).toEqual(expectedResolvedSample)
    })
    test('should throw an error', () => {
        const resolvedSample = {}
        const model = new Sample(resolvedSample) // failing here map method since i am passing an object
        expect(model).toThrow(TypeError);
    })
})

Я должен потерпеть неудачу, тогда только он придет в блок захвата и даст мне полное покрытие.Что я здесь делаю не так.

Любая помощь приветствуется.

Ответы [ 2 ]

2 голосов
/ 20 марта 2019

Попробуйте обернуть код, генерирующий исключение, в функцию:

expect(() => {
   const model = new Sample(resolvedSample)
}).toThrow(TypeError);
1 голос
/ 20 марта 2019

В соответствии с документами Jest,

Примечание. Вы должны заключить код в функцию, в противном случае ошибка не будет обнаружена и утверждение не будет выполнено.

Ссылка: https://jestjs.io/docs/en/expect#tothrowerror

describe('Dummy test', () => {
  class Sample {
      constructor(data){
        this.resolvedData = this.retrieveData(data) 
      }

      retrieveData(data){
        try{
          const resolvedData = data.map(o => o.name);
        }catch(error){
          throw error
        }
      }   
  }

  test('should fail', () => {
      expect(() => {
          new Sample({});
      }).toThrowError(TypeError);
  });
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...