मैं मोंगो के साथ डेटा इंटरैक्शन को सत्यापित करने के लिए जेस्ट और मोंगोस के साथ कुछ यूनिट परीक्षण लिखना चाहता हूं।जेस्ट यूनिट परीक्षणों से मोंगो से कनेक्ट करने का प्रयास करते समय
मैं यहां मोंगोज़ का नकल नहीं करना चाहता क्योंकि मैं विशेष रूप से उस तरीके को सत्यापित करना चाहता हूं जिस पर मोंगो दस्तावेज़ बनाए/संशोधित/हैंडल किए गए हैं।
package.json
नोड मॉड्यूल छोड़ने के लिए कॉन्फ़िगर किया गया है unmocked:
const mongoose = require('mongoose');
describe('MyTest',() => {
beforeAll((done) => {
mongoose.connect('mongodb://127.0.0.1:27017/test');
let db = mongoose.connection;
db.on('error', (err) => {
done.fail(err);
});
db.once('open',() => {
done();
});
});
it('has some property',() => {
// should pass but actually never gets run
expect(1).toBe(1);
});
});
यहाँ उत्पादन है:
{
"jest": {
"unmockedModulePathPatterns": [
"node_modules"
]
}
}
मेरी वास्तविक परीक्षा में, मैं मोंगो से कनेक्ट होने की देखभाल करने के लिए एक beforeAll()
हुक की स्थापना की है :
/usr/local/bin/node node_modules/jest-cli/bin/jest.js --verbose
Using Jest CLI v0.10.0, jasmine2
FAIL src/lib/controllers/my-controller/__tests__/my-test.js (5.403s)
MyTest
✕ it has some property
MyTest › it has some property
- Error: Timeout - Async callback was not invoked within timeout specified by jasmine.DEFAULT_TIMEOUT_INTERVAL.
at Timer.listOnTimeout (timers.js:92:15)
1 test failed, 0 tests passed (1 total in 1 test suite, run time 5.903s)
Process finished with exit code 1
प्रत्येक बार परीक्षण समय done()
को beforeAll()
हुक में कभी भी नहीं कहा जाता है - कोई त्रुटि नहीं फेंकती है और न ही कंसोल पर मुद्रित कुछ भी। कोड को चलाने के लिए मैं beforeAll()
हुक में ब्रेकपॉइंट्स रख सकता हूं। ऐसा लगता है कि मोंगो को कनेक्शन खोलने का प्रयास करते समय मोंगोज लटक रहा है, और फिर जेस्ट परीक्षण समय समाप्त हो रहे हैं।
जब मैं जेस्ट पर्यावरण के बाहर समान कोड चला रहा हूं, तो यह अपेक्षा के अनुसार जुड़ता है (तत्काल निकट)। संदेह है कि यह समस्याएं पैदा कर सकता है, मैंने पूरी तरह से जेस्ट की ऑटोमॉक सुविधा को अक्षम करने के साथ प्रयोग किया है, लेकिन व्यवहार अपरिवर्तित बनी हुई है।
मुझे लगता है कि मैंने कुछ अविश्वसनीय रूप से स्पष्ट किया है ... कोई विचार क्या हो सकता है? ।।
- हंसी-CLI वी 0.10.0
- नेवला वी 4.4.11
अपडेट:
- सादा
function(done) {}
साथ की जगह ES6 तीर समारोह वाक्य रचना की कोशिश की। कोई फर्क नहीं। done
पैरामीटर को पार करके परीक्षण एसिंक बनाने का प्रयास किया, और इसे परीक्षण पूर्ण करने पर कॉल किया। कोई फर्क नहीं।- की कोशिश की
error
औरconnected
ईवेंट हैंडलर्स - सभी नेवला से संबंधित कोड बाहर टिप्पणी की जाँच करने के लिए कि
beforeAll()
हुक सही ढंग से काम कर रहा है की कोशिश की की घोषणा के बादmongoose.connect()
बुला - यह है।
एक लंबे शॉट के बिट, लेकिन आप ES6 तीर वाक्य रचना के बजाय समारोह (किया) का उपयोग कर की कोशिश की थी? कुछ सूक्ष्म मतभेद हैं। –
क्या आप नीचे आज़मा सकते हैं? 'यह(), (किया => 'कुछ संपत्ति है' { // पास करना चाहिए, लेकिन वास्तव में कभी नहीं चलाने हो जाता है उम्मीद (1) .toBe (1); किया(); });' –
धन्यवाद - दोनों सुझावों का कोई फायदा नहीं हुआ, मेरे विवरण में जोड़ दिया जाएगा। – jayp