2016-04-05 6 views
10

मैं मोंगो के साथ डेटा इंटरैक्शन को सत्यापित करने के लिए जेस्ट और मोंगोस के साथ कुछ यूनिट परीक्षण लिखना चाहता हूं।जेस्ट यूनिट परीक्षणों से मोंगो से कनेक्ट करने का प्रयास करते समय

मैं यहां मोंगोज़ का नकल नहीं करना चाहता क्योंकि मैं विशेष रूप से उस तरीके को सत्यापित करना चाहता हूं जिस पर मोंगो दस्तावेज़ बनाए/संशोधित/हैंडल किए गए हैं।

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() बुला - यह है।
+1

एक लंबे शॉट के बिट, लेकिन आप ES6 तीर वाक्य रचना के बजाय समारोह (किया) का उपयोग कर की कोशिश की थी? कुछ सूक्ष्म मतभेद हैं। –

+1

क्या आप नीचे आज़मा सकते हैं? 'यह(), (किया => 'कुछ संपत्ति है' { // पास करना चाहिए, लेकिन वास्तव में कभी नहीं चलाने हो जाता है उम्मीद (1) .toBe (1); किया(); });' –

+0

धन्यवाद - दोनों सुझावों का कोई फायदा नहीं हुआ, मेरे विवरण में जोड़ दिया जाएगा। – jayp

उत्तर

2

जेस्ट-चमेली Jasmine से अलग है।
आपके द्वारा उपयोग किए जाने वाले वाक्यविन्यास वास्तव में जैस्मीन 2.0+ से संबंधित नहीं हैं, जेस्ट-जैस्मीन नहीं। तो यदि आप जेस्ट का उपयोग करना जारी रखना चाहते हैं, तो आपको जवाब खोजने के लिए जेस्ट डॉक्स में देखना होगा।
और भी, "पहले सभी" मानक जेस्ट इंजेक्शन चर नहीं है, jest api देखें।

मुझे आपका कोड जैस्मीन 2.3.4 के साथ चला गया, यह ठीक है। मैंने इस नौकरी को खत्म करने के लिए उत्साह में वादा/गड्ढे की कोशिश की लेकिन असफल रहा।

पहला, install jasmine। ; अपने कोड में

fenqideMacBook-Pro:jasmine-test fenqi$ ls -R 
.: 
spec/ 

./spec: 
mongodbspec.js support/ 

./spec/support: 
jasmine.json 

फिर, संपादित कल्पना/mongodbspec.js, मैं सिर्फ एक पंक्ति जोड़ें " 'सख्त का उपयोग'":

npm install -g jasmine 
mkdir jasmine-test 
cd jasmine-test 
jasmine init 
jasmine examples 
touch spec/mongodbspec.js 

यहाँ मेरी निर्देशिका संरचना है।

'use strict'; 

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); 
    }); 
}); 

अंतिम, रन 'चमेली':

fenqideMacBook-Pro:jasmine-test fenqi$ jasmine 
Started 
. 


1 spec, 0 failures 
Finished in 0.023 seconds 
+0

इसमें देखने के लिए धन्यवाद - यह जानने में मदद करता है कि मेरा कोड isn' स्पष्ट रूप से टूटा हुआ नहीं! मुझे माफ़ कर दो लेकिन आप यहां एक अलग सवाल का जवाब दे रहे हैं :)। मुझे पता है कि जेस्ट जैस्मीन के एक अलग स्वाद का उपयोग करता है और उन हुक तकनीकी रूप से अनियंत्रित होते हैं (लेकिन वे काम करते हैं)। मैं जेस्ट के अंतर्निहित ऑटोमॉक, और कवरेज इत्यादि का लाभ लेना चाहता हूं .. – jayp

+0

क्षमा करें कि आपकी समस्या का समाधान नहीं हुआ। शायद आप उस वाक्यविन्यास का समर्थन करने के लिए जेस्ट को हैक कर सकते हैं, लेकिन जैसा कि मैंने कोशिश की, यह शायद जटिल हो। –

संबंधित मुद्दे

 संबंधित मुद्दे