mocha con nodejs afirmar cuelga / tiempos de espera para afirmar (falso) en lugar de error
Tengo este tipo de prueba de moca:
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()
)
El problema es que cada vez que hagoassert(false)
, la prueba se bloquea hasta el tiempo de espera, en lugar de dar un error de afirmación, ¿por qué?
Editar:
Por ejemplo si tengo estas dos pruebas
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()
)
El primero, da el error de aserción como se esperaba, el segundo, registrahere
y cuelga enassert(false)
entoncesafter
nunca se registra. Tiene algo que ver conarticles
siendo una corriente y la afirmación está dentro de unpull
devolución de llamada, esto es de laAPI highland.js.
Edición resuelta:
Entonces, según Paul, arreglé el problema con este código:
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:
He producido una versión simplificada del problema:
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()
)
Veo que su versión realmente funciona @Louis, pero si involucra promesas en la mezcla, mocha no puede manejar el problema, por lo que se bloqueará en este ejemplo. También intente comentar elassert false
y verlo pasar.
Así que Louis, espero llamar tu atención, ¿podrías explicar el problema ytry catch
se ve realmente feo y espero que encuentres una solución razonable para esto.