2012-02-10 13 views
5

क्या किसी को पता है कि मोंगोस मान्यताओं का परीक्षण कैसे करें?परीक्षण MongooseJs मान्यताओं

var UserAccount = new Schema({ 
    user_name  : { type: String, required: true, lowercase: true, trim: true, index: { unique: true }, validate: [ validateEmail, "Email is not a valid email."] }, 
    password  : { type: String, required: true }, 
    date_created : { type: Date, required: true, default: Date.now } 
}); 

validateEmail विधि इस तरह के रूप में परिभाषित किया गया है::

// Email Validator 
function validateEmail (val) { 
    return /^[a-zA-Z0-9._-][email protected][a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$/.test(val); 
} 

मैं सत्यापन का परीक्षण करना चाहते

उदाहरण के लिए, मैं (एक उदाहरण के रूप में) निम्नलिखित स्कीमा है। अंत परिणाम यह है कि मैं मान्यताओं का परीक्षण करने में सक्षम होना चाहता हूं और उन चीजों के आधार पर मैं उन अन्य परीक्षणों को लिख सकता हूं जो कोड के उन टुकड़ों के बीच बातचीत का परीक्षण करते हैं। उदाहरण: उपयोगकर्ता एक ही उपयोगकर्ता नाम के साथ साइन अप करने का प्रयास करता है (ईमेल पहले से उपयोग में है)। मुझे एक परीक्षण की आवश्यकता है जिसे मैं वास्तव में रोक सकता हूं या देख सकता हूं कि सत्यापन डीबी को मारने के बिना काम कर रहा है। मैं इन परीक्षणों के दौरान मोंगो को मारना नहीं चाहता हूं। ये यूएनआईटी परीक्षण एकीकरण परीक्षण नहीं होना चाहिए। :)

धन्यवाद!

उत्तर

9

मुझे हाल ही में एक ही समस्या थी।

सबसे पहले मैं अपने स्वयं के सत्यापनकर्ताओं की जांच करने की सिफारिश करता हूं। बस उन्हें एक अलग फ़ाइल में ले जाएं और आपके पास सत्यापन कार्यों को निर्यात करें।

यह आसानी से आपके मॉडल को अलग-अलग फ़ाइलों में विभाजित करने की अनुमति देता है क्योंकि आप इन मान्यताओं को विभिन्न मॉडलों में साझा कर सकते हैं।

// validators.tests.js 
var validator = require('./validators') 

// Example test 
describe("validateEmail", function(){ 
    it("should return false when invalid email", function(){ 
     validator.validateEmail("asdsa").should.equal(false) 
    })  
}) 
अब कठिन भाग के लिए

:

// validators.js 
exports.validatePresenceOf = function(value){ ... } 
exports.validateEmail = function(value){ ... } 

यहाँ इस (मोचा + का उपयोग कर करना चाहिए) के लिए एक नमूना परीक्षण है:

यहाँ अपने दम पर प्रमाणकों के परीक्षण का एक उदाहरण है:)

डेटाबेस तक पहुंच के बिना आपके मॉडल वैध होने का परीक्षण करने के लिए एक वैध कार्य है जिसे सीधे आपके मॉडल पर बुलाया जा सकता है।

describe("validating user", function(){ 
    it("should have errors when email is invalid", function(){ 
    var user = new User(); 
    user.email = "bad email!!" 
    user.validate(function(err){  
     err.errors.email.type.should.equal("Email is invalid") 
    }) 
    }) 

    it("should have no errors when email is valid", function(){ 
    var user = new User(); 
    user.email = "[email protected]" 
    user.validate(function(err){ 
     assert.equal(err, null) 
    }) 
    }) 
}) 

सत्यापनकर्ता कॉलबैक एक त्रुटि वस्तु वापस कि कुछ इस तरह दिखता हो जाता है:

यहाँ कैसे मैं वर्तमान में यह कर का एक उदाहरण है

{ message: 'Validation failed', 
    name: 'ValidationError', 
    errors: 
     { email: 
      { message: 'Validator "Email is invalid" failed for path email', 
      name: 'ValidatorError', 
      path: 'email', 
      type: 'Email is invalid' 
      } 
     } 
} 

मैं अभी भी NodeJS के लिए नया हूँ और mongoose लेकिन इस तरह मैं अपने मॉडल + सत्यापनकर्ताओं का परीक्षण कर रहा हूं और ऐसा लगता है कि अब तक बहुत अच्छी तरह से काम कर रहा है।

+0

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

2

आपको एक वादे के रूप में वैध() विधि का उपयोग करना चाहिए और इसे एक उपकरण के साथ परीक्षण करना चाहिए जो एसिंक सामग्री (पूर्व: Chai as Promised) के लिए दावा करता है।

सबसे पहले, एक वादा पुस्तकालय की आवश्यकता होती है और (उदाहरण के क्यू के लिए) वादा प्रदाता के लिए बाहर स्विच:

mongoose.Promise = require('q').Promise; 

बाद में बस, उपयोग वादों के बारे में दावा करता है:

it('should show errors on wrong email', function() { 
     user = new UserModel({ 
      email: 'wrong email adress' 
     }); 
     return expect(user.validate()).to.be.rejected; 
    }); 

    it('should not show errors on valid email adress', function() { 
     user = new UserModel({ 
      email: '[email protected]' 
     }); 
     return expect(user.validate()).to.be.fulfilled; 
    }); 
संबंधित मुद्दे