2017-01-31 1 views
0

Я пишу простые модульные тесты с помощью sinon.JS. Код испытуемого имеют некоторую проверку типа, который бросает TypeError:Sinon's spy.threw() не ведет себя так, как ожидалось, передавая ему аргумент ошибки?

Tx = class Tx { 
    constructor(date) { 
     if (!(date instanceof Date)) throw new TypeError(); 
     this.date = date; 
    } 
} 

В моем test.js, я использую Sinon, чтобы проверить, что конкретизация Tx терпит неудачу, когда аргумент не дата:

describe('Tx', function() { 
    describe('#constructor', function() { 
     it('should fail when not passed a date as 1st param', function() { 
      var txSpy = sinon.spy(Tx.constructor); 
      try { 
       tx = new Tx(true); 
      } catch (e) { 
       // test success 
       console.log('Error: '+e) 
      } 
     } 
    } 
} 
result = txSpy.threw(new TypeError()); 
assert(result); 

Утверждение терпит неудачу, даже если выход catch является «Error: TypeError»; Тот же результат возникает при передаче строкового описания типа ошибки (т. Е. «TypeError», согласно the sinon API).

Любые подсказки? Заранее спасибо :)

ответ

1

Экземпляр TypeError, который вы ожидаете, не тот, который был брошен, хотя они являются экземплярами того же класса.

В документации вы связаны, вы заметите, что, когда метод .threw() вызывается с параметром error объекта (и возвращает успех), то error объект является тот, который был брошен, а не другой экземпляр того же класса.

Чтобы проверить класс используемого исключения, похоже, что вы должны указать параметр { name : "ExceptionClassName" } (т. Е. { name: "TypeError" } в вашем случае).

+0

Я думал, что это может быть так ... но тогда как бы я проверил на равенство типов, а не на равенство экземпляров? – Navonod

+0

@Navonod Я отредактировал в том, что выглядит как лучший способ, но вы должны знать, что я никогда не использовал 'sinon'. Хотя я думаю, что мой ответ должен решить вашу непосредственную проблему, он может не сработать для некоторых угловых случаев или просто не будет лучшей практикой. – Aaron

Смежные вопросы