2013-12-21 6 views
0

У меня возникла странная проблема, я написал несколько тестов для своего модуля, но последний не работает. Я тестирую асинхронную функцию, все работает отлично, за исключением случаев, когда тест завершился неудачно. Я не знаю, почему, но код после assert.equal не выполняется. Если тест преуспеть, то его правильно вызывают.Nodejs Assert не выполняет тесты Mocha

describe('download', function(){ 

    it('should download pictures from given URLs', function(done){ 
     Download.download(list, function(){ 

      var pictures = fs.readdirSync("exports/merge/"); 

      console.log('before assert - '+pictures.length); 
      assert.equal(pictures.length, 3); 
      console.log('before done - '+pictures.length); 
      done(); 
     }); 
    }); 
}); 

Печатается журнал «before assert», затем ничего не происходит. Если I pictures.length равно 3, done() корректно вызывается.

+0

Что делает первый вывод 'console.log' для' pictures.length'? может быть 'undefined' или что-то в этом роде. – Gntem

+0

Нет, это int, если это 3, все в порядке, ошибка возникает, когда это int, отличное от 3. – Spope

+0

какое сообщение выводит? – Gntem

ответ

1

Посылы ошибки проглатывания. Для того, чтобы их бросили, самым простым решением является прекращение цепи обещаний .done().

var p = Download.download(list, function(){ 

     var pictures = fs.readdirSync("exports/merge/"); 

     console.log('before assert - '+pictures.length); 
     assert.equal(pictures.length, 3); 
     console.log('before done - '+pictures.length); 
     done(); 
    }); 
    p.done(); 

см для получения дополнительной информации bluebird's documentation или Q's documentation по теме:

Когда вы дойдете до конца цепочки обещаний, вы должны либо вернуть последнее обещание или конец цепи. Поскольку обработчики ловят ошибки, это неудачный шаблон, что исключения могут остаться ненаблюдаемыми. Итак, верните его или положите его.

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