mocha с nodejs assert зависает / тайм-ауты для assert (false) вместо ошибки

У меня есть такой тест мокко:

describe 'sabah', →
    beforeEach →
        @sabahStrategy = _.filter(@strats, { name: 'sabah2' })[0]
            .strat

    it 'article list should be populated', (done) →
        @timeout 10000
        strat = new @sabahStrategy()
        articles = strat.getArticleStream('barlas')
        articles.take(2).toArray( (result)→
            _.each(result, (articleList) →

                // I make the assertions here
                // assert(false)
                assert(articleList.length > 1)
            )
            done()
        )

Проблема в том, что всякий раз, когда я делаюassert(false)тест зависает до истечения времени ожидания, вместо того, чтобы выдавать ошибку подтверждения, почему?

Редактировать:

Например, если у меня есть эти два теста

    it 'assert false', (done) →
        assert(false)
        done()

    it 'article link stream should be populated', (done) →
        @timeout 20000
        articles = @sabahStrategy.articleLinkStream('barlas')
        articles.pull((err, result)→
            console.log('here')
            assert(false)
            console.log('after')
            assert(!err)
            assert(result.length > 1);
            _.each(result, (articleList) →
                assert(articleList.link)
            )
            done()
        )

Первый, дает ошибку подтверждения, как и ожидалось, второй, журналыhereи висит наassert(false) такafter никогда не регистрируется. Это как-то связано сarticles будучи потоком, и утверждение находится в пределахpull обратный вызов, это отAPI highland.js.

Решено Править:

Итак, по словам Павла, я исправил проблему с этим кодом:

    it 'article stream should be populated', (done) →
        @timeout 30000
        articles = @sabahStrategy.articleStream('barlas')

        articles.pull((err, result) →
            try
                # assert false properly throws now.
                assert(false)
                assert(!err)
                assert(result.length == 1)
                assert(result[0].body)
                assert(result[0].title || result[0].title2)
                done()
            catch e
                done(e)
        )

Edit2:

Я создал упрощенную версию проблемы:

h = require('highland')
Q = require('q')

describe 'testasynchigh', →
    beforeEach →
        @deferred = Q.defer()
        setTimeout((→
            @deferred.resolve(1)
        ).bind(this), 50)


    it 'should throw', (done) →
        s = h(@deferred.promise);
        s.pull((err, result) →
            console.log result
            assert false
            done()
        )

Я вижу, что ваша версия действительно работает @Louis, но если вы включите обещания в микс, mocha не сможет решить проблему, поэтому в этом примере она зависнет. Также попробуйте закомментироватьassert false и увидеть, как это проходит.

Итак, Луи, надеюсь, я привлек ваше внимание, не могли бы вы объяснить проблему, иtry catch выглядит действительно некрасиво, и я надеюсь, что вы найдете разумное решение для этого.

Ответы на вопрос(3)

Ваш ответ на вопрос