mocha with nodejs assert hangs / timeouts für assert (false) anstelle von error

Ich habe diese Art von Mokka-Test:

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()
        )

Das Problem ist, wann immer ich es tueassert(false), der Test bleibt bis zum Timeout hängen, anstatt einen Assertionsfehler auszugeben. Warum?

Bearbeiten

Zum Beispiel, wenn ich diese beiden Tests habe

    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()
        )

Der erste gibt den erwarteten Assertionsfehler aus, der zweite protokollierthere und hängt beiassert(false) soafter ist nie eingeloggt. Es hat etwas mit @ zu tarticles ein Stream zu sein und die Behauptung ist in einempull Rückruf, dies ist von der highland.js API.

Solved Edit:

Also laut Paul habe ich das Problem mit diesem Code behoben:

    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:

Ich habe eine vereinfachte Version des Problems erstellt:

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()
        )

Ich sehe, Ihre Version funktioniert in der Tat @Louis, aber wenn Sie Versprechungen in die Mischung einbeziehen, kann Mokka das Problem nicht lösen, so dass es in diesem Beispiel hängen bleibt. Versuchen Sie auch, das @ zu kommentiereassert false und siehe, es geht vorbei.

So louis ich hoffe ich hab deine aufmerksamkeit bekommen, könntest du das problem erklären undtry catch sieht in der Tat hässlich aus und ich hoffe, Sie finden eine vernünftige Lösung.

Antworten auf die Frage(3)

Ihre Antwort auf die Frage