के बजाय ज़ोर (गलत) के लिए मैं एक मोचा परीक्षण के इस प्रकार है:मोचा जोर रुक जाता है/समय समाप्ति त्रुटि
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
कॉलबैक के भीतर है, यह highland.js API से है।
हल संपादित:
मैं इस समस्या का एक सरलीकृत संस्करण का उत्पादन किया गया है:
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()
)
मुझे लगता है कि आपका संस्करण वास्तव में @ लुइस काम करता है, लेकिन यदि आप मिश्रण में वादे शामिल करते हैं, तो मोचा समस्या को संभाल नहीं सकता है, इसलिए यह इस उदाहरण में लटका होगा। assert false
पर टिप्पणी करने का प्रयास करें और इसे पास करें।
तो लुई मुझे आशा है कि मुझे आपका ध्यान मिल जाएगा, क्या आप समस्या की व्याख्या कर सकते हैं, और try catch
वास्तव में बदसूरत लग रहा है और मुझे उम्मीद है कि आपको इसका उचित समाधान मिल जाएगा।
मैं भी दो साल के लिए मोचा कोड लिखा है, और * * आम तौर पर आपको अपने उत्तर में अपवादों को पकड़ने की आवश्यकता नहीं होती है। ** यह बहुत अच्छी तरह से हो सकता है कि 'highland.js' अपवाद निगल रहा है या इसके बारे में कुछ विशिष्टता है कि यह कॉलबैक में अपवादों को कैसे प्रबंधित करता है। लेकिन आम तौर पर, मोचा अपवादों का पता लगाने में काफी सक्षम है, चाहे वे तुल्यकालिक या असीमित हों। बस इसे चलाएं ("परीक्षण", फ़ंक्शन (किया गया) {setTimeout (फ़ंक्शन() {नई त्रुटि फेंक दें();}, 100);}); '' 'किया गया 'नहीं कहा जाता है और यह कोई गलती नहीं है।)' मोचा किसी भी मुद्दे के बिना अपवाद का पता लगाएगा। – Louis
@ लुइस, आप यहां वर्णित की तरह निगलने का मतलब है https://github.com/caolan/highland/issues/121, क्या आपको लगता है कि यह समस्या हो सकती है? – user3995789
@ user3995789 हाँ, मुझे लगता है कि यह मुद्दा है। मैंने आरएसवीपी (एक और वादा लाइब्रेरी) के साथ अपने नवीनतम स्निपेट की कोशिश की है और क्यू के साथ वही परिणाम प्राप्त कर लिया है। मैंने हाईलैंड के 'एरर्स (' कॉल का उपयोग करने का भी प्रयास किया है, लेकिन मुझे इससे कुछ भी नहीं मिला है। – Louis