2016-11-10 6 views
2

Я совершенно новый для Chai, поэтому я все еще разбираюсь в вещах.Chai - ожидать, что функция бросить ошибку

У меня есть функция, которая проверяет ответ API и возвращает либо правильный обмен сообщениями, либо выдает ошибку.

Мне удалось написать тесты для обмена сообщениями, однако я борюсь с тестом ошибок. Вот что я написал на сегодняшний день:

var networkDataHelper = require('../network_data_helper.js'); 

describe('networkDataHelper', function() { 
var subject = new networkDataHelper(); 
var postcode; 

    describe('#formatPostcodeStatus', function() { 
     var status = { 
      "locationValue":"SL66DY", 
      "error":false, 
      "maintenance":null, 
     }; 

     context('a request with an incorrect postcode', function() { 
      it('throws an error', function() { 
       status.errorCode = "INVALID_POSTCODE"; 
       expect(subject.formatPostcodeStatus(status)).to.throw(Error); 
      }); 
     }); 
    }); 
}); 

Когда я запускаю тест выше, я получаю следующее сообщение об ошибке:

1) networkDataHelper #formatPostcodeStatus a request with an incorrect postcode throws an error: Error: INVALID_POSTCODE

Похоже, что ошибка, которая в настоящее время брошенной вызывающее испытание терпеть неудачу, но я не слишком уверен. У кого-нибудь есть идеи?

ответ

4

С оговоркой, что я не эксперт Chai, конструкция у вас есть:

expect(subject.formatPostcodeStatus(status)).to.throw(Error); 

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

Вместо этого, вы должны передать функцию expect():

expect(function() { subject.formatPostCodeStatus(status); }) 
    .to.throw(Error); 

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

+0

Конечно! Теперь все работает как ожидается. Благодарим вас за информативный ответ и фрагмент кода; Я понимаю, почему возникла проблема, и ваше решение работает отлично. – tombraider