2016-09-20 11 views
5

के साथ मॉडल मिक्सिन का परीक्षण कैसे करते हैं मेरे पास मेरे ऐप में है जिसमें DS.attr() और/या DS.belongsTo() शामिल हैं। मैं सोच रहा था कि मैं उन्हें कैसे परीक्षण करूँ?हम एम्बर-क्ली

डिफ़ॉल्ट रूप से, एंबर-CLI इस परीक्षण

test('it works', function(assert) { 
    var MyModelObject = Ember.Object.extend(MyModelMixin); 
    var subject = MyModelObject.create(); 
    assert.ok(subject); 
}); 

उत्पन्न लेकिन जब मैं एक DS.attr() के साथ बातचीत करने की कोशिश की मैं निम्नलिखित त्रुटि मिली:

TypeError: Cannot read property '_attributes' of undefined 
    at hasValue (http://localhost:4200/assets/vendor.js:90650:25) 
    at Class.get (http://localhost:4200/assets/vendor.js:90730:13) 
    at Descriptor.ComputedPropertyPrototype.get (http://localhost:4200/assets/vendor.js:29706:28) 
    at Object.get (http://localhost:4200/assets/vendor.js:35358:19) 
    at Class.get (http://localhost:4200/assets/vendor.js:49734:38) 
    at Object.<anonymous> (http://localhost:4200/assets/tests.js:20126:25) 
    at runTest (http://localhost:4200/assets/test-support.js:2779:28) 
    at Object.run (http://localhost:4200/assets/test-support.js:2764:4) 
    at http://localhost:4200/assets/test-support.js:2906:11 
    at process (http://localhost:4200/assets/test-support.js:2565:24) 

कौन सा होश बनाते हैं। यह करने के लिए सबसे अच्छा तरीका क्या है ? क्या मुझे परीक्षण के भीतर DS.Model बनाना चाहिए और फिर उस पर मिश्रण लागू करना चाहिए?

धन्यवाद!

उत्तर

4

इस तरह मॉडल मॉडल मिश्रण का यूनिट परीक्षण करना थोड़ा मुश्किल है क्योंकि इसे मॉडल बनाने के लिए स्टोर तक पहुंच की आवश्यकता है। आमतौर पर, स्टोर मिश्रण परीक्षणों में उपलब्ध नहीं है क्योंकि यहां तक ​​कि एक कंटेनर भी नहीं है। इसके अतिरिक्त, चूंकि हम सिर्फ मिश्रण का परीक्षण करना चाहते हैं, इसलिए हम वास्तविक मॉडल की आवश्यकता नहीं चाहते हैं, इसलिए हम केवल परीक्षणों के लिए एक फोनी होस्ट मॉडल बना और पंजीकृत कर सकते हैं। यहां बताया गया है कि मैंने यह कैसे किया।

सबसे पहले, 'एम्बर-डेटा' में खींचें और 'क्यूनिट' से स्टॉक हेल्पर्स के बजाय 'एम्बर-कुनीट' से सहायकों का उपयोग करें। इस के साथ

import { module, test } from 'qunit'; 

: इस बदलें

moduleFor('mixin:my-model-mixin', 'Unit | Mixin | my model mixin', { 
    // Everything in this object is available via `this` for every test. 
    subject() { 
    // The scope here is the module, so we have access to the registration stuff. 
    // Define and register our phony host model. 
    let MyModelMixinObject = DS.Model.extend(MyModelMixin); 
    this.register('model:my-model-mixin-object', MyModelMixinObject); 

    // Once our model is registered, we create it via the store in the 
    // usual way and return it. Since createRecord is async, we need 
    // an Ember.run. 
    return Ember.run(() => { 
     let store = Ember.getOwner(this).lookup('service:store'); 
     return store.createRecord('my-model-mixin-object', {}); 
    }); 
    } 
}); 

एक बार जब आप जगह में इस स्थापना के बाद, आप this.subject() उपयोग कर सकते हैं:

import { moduleFor, test } from 'ember-qunit'; 
import DS from 'ember-data'; 

उसके बाद, आप इस तरह अपने मॉड्यूल प्रकटीकरण को अपडेट परीक्षण के लिए एक वस्तु प्राप्त करने के लिए व्यक्तिगत परीक्षण में।

test('it exists', function(assert) { 
    var subject = this.subject(); 
    assert.ok(subject); 
}); 

इस बिंदु पर, यह केवल एक मानक इकाई परीक्षण है। आपको एक एम्बर.रुन ब्लॉक में एसिंक या गणना कोड लपेटने की आवश्यकता हो सकती है:

test('it doubles the value', function(assert) { 
    assert.expect(1); 
    var subject = this.subject(); 
    Ember.run(() => { 
    subject.set('someValue', 20); 
    assert.equal(subject.get('twiceSomeValue'), 40); 
    }); 
});