2015-04-20 4 views
10

ember-data संस्करण 1.0.0-beta.16 की दुकान के लिए the blog-post के अनुसार अब एक सेवा के रूप में इस्तेमाल किया जा सकता है:मैं क्यूनेट का उपयोग करके एम्बर यूनिट परीक्षणों में एक सेवा के रूप में स्टोर पर कैसे निर्भर करता हूं?

TweetComposerComponent = Ember.Component.extend({ 
    store: Ember.inject.service()  
}); 

हालांकि, मैं इस तरह के एक घटक पर qunit इकाई परीक्षण कैसे करना है पता नहीं कर सकते हैं।

moduleForComponent('tweet-composer', { 
    needs: ['service:store'] 
}); 

और: मैं निम्नलिखित की कोशिश की है

moduleForComponent('tweet-composer', { 
    needs: ['store:main'] 
}); 

और जब मैं पूर्व मैं एक त्रुटि Attempting to register an unknown factory: 'service:store' हो और अगर मैं तो बाद कर storeundefined है।

विचार?

(मैं ember-cli शैली ऐप लिख रहा हूं)।

अद्यतन:

यह वहाँ एंबर-परीक्षण सहायकों रेपो में इस के लिए एक open issue लगता है।

`import TestModuleForComponent from 'ember-test-helpers/test-module-for-component'` 
`import { createModule } from 'ember-qunit/qunit-module'` 

# This assumes the last argument, the callbacks, is present, although it 
# does support the description being an optional argument. 
moduleForStoreComponent = -> 
    args = Array.prototype.slice.call arguments 
    callbacks = args[args.length-1] 
    # Wrap the original beforeEach callback in a modified version that 
    # also sets up the store for the test container. 
    originalSetup = callbacks.beforeEach 
    callbacks.beforeEach = -> 
    DS._setupContainer(@container) 
    originalSetup.call(@) if originalSetup 
    callbacks.store = -> 
    @container.lookup('store:main') 
    args.unshift TestModuleForComponent 
    createModule.apply @, args 

`export default moduleForStoreComponent` 

उत्तर

12

एक इकाई परीक्षण एक जगह है जहाँ सब कुछ को छोड़कर पूरी तरह से काम करता है:

मैं इसे ठीक प्रतीक्षा कर रहा हूँ, वहीं मैं एक सहायक है कि एक रोकने के अंतराल के उपाय के रूप में काम कर सकते हैं (coffeescript) तक पकाया कोड/घटक/इकाई जिसे आप परीक्षण कर रहे हैं।

तो, store को पूरी तरह से काम करने के लिए माना जाना चाहिए (0 त्रुटियां/बग)।

moduleForComponent('tweet-composer', { 
    beforeEach: function() { 
     this.subject({ 
      store: {/*empty object*/} 
     }); 
    } 
}); 

अपने परीक्षण के कुछ हिस्सों की दुकान से लिया गया डेटा पर निर्भर करते हैं, तो आप की तरह कुछ कर सकते हैं::

कुछ इस तरह अपने परीक्षण में काम करना चाहिए

this.subject({ 
    store: { 
     find: function() { 
      var mockedModel = Ember.Object.create({/*empty*/}); 
      return mockedModel; 
     } 
    } 
}); 

यह संरक्षित करने के लिए है "यूनिट टेस्ट" की स्थिति, यदि आप अपने ऐप से अन्य ऑब्जेक्ट्स को शामिल करना और पंजीकरण करना शुरू करते हैं तो आप वास्तव में एकीकरण परीक्षण लिखेंगे।

नोट:

सामान्य तौर पर, ऊपर मॉडल एक घटक में सीधे देख एक विरोधी पैटर्न है, और आप किसी मॉडल में है कि घटक शामिल टेम्पलेट की जरूरत है पारित करने के लिए पसंद करते हैं चाहिए।

http://discuss.emberjs.com/t/should-ember-components-load-data/4218/2?u=givanse

+0

स्वीकृति परीक्षण excruciatingly धीमी गति से कर रहे हैं। अगर मैं आवेदन के कई पहलुओं का परीक्षण कर रहा हूं तो मैं केवल उनका उपयोग करना पसंद करता हूं। यदि मैं बिल्कुल दो टुकड़ों का परीक्षण कर रहा हूं, तो यह उन दो टुकड़ों को तुरंत चालू करने और उन्हें एक साथ परीक्षण करने के लिए बहुत अधिक समझ में आता है, लेकिन शेष ऐप के अलगाव में। –

+1

मुझे आपके द्वारा उल्लेख किए गए धागे से अवगत है, और मैं सलाह की सराहना करता हूं, लेकिन मैं शिविर में हूं जो महसूस करता है कि कुछ घटकों के अंदर स्टोर पहुंच को सक्षम करने के लिए कुछ सीमित, उपयुक्त उपयोग हैं।विशेष रूप से, जब घटक में प्रतिनिधित्व किया गया राज्य यूआरएल से नहीं लिया गया है, बल्कि घटक का एक आंतरिक और पृथक पहलू है, तो यह घटक में इस राज्य को अलग करने और सभी मार्गों को प्रदूषित करने के लिए समझ सकता है जो घटक को विशेषता देते हैं मॉडलों को तुरंत चालू करने के लिए आवश्यक तर्क और उन्हें घटक परिवर्तनों के लिए राज्य आंतरिक के रूप में अद्यतन करें। –

+0

सहमत हैं, आपके पास एक अच्छा बिंदु है। फिर भी, इस प्रकार के परीक्षण (आपके घटक) में, आप जो परीक्षण कर रहे हैं वह घटक का तर्क स्टोर नहीं है। इसलिए यह वास्तव में कोई फर्क नहीं पड़ता कि डेटा कहां से आ रहा है। परीक्षण करने की क्या ज़रूरत है यह सत्यापित करता है कि डेटा के विभिन्न टुकड़े सही घटनाओं को ट्रिगर करते हैं और परिणामस्वरूप अपेक्षित आउटपुट होते हैं। – givanse

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