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.