2017-04-03 6 views
7

मैं वू सीएलआई से VueJS का उपयोग कर रहा हूँ। तो मेरे सभी घटक .vue प्रारूप में हैं।मैं VueJS में गणना गुणों का परीक्षण कैसे कर सकता हूं?

मेरे घटकों में से एक में, मेरे पास डेटा अनुभाग में fields नामक एक सरणी है।

//Component.vue 
data() { 
    return { 
    fields : [{"name" : "foo", "title" : "Foosteria"}, {"name" : "bar", "title" : "Barrista"}] 
    } 
} 

मैं एक परिकलित प्रॉपर्टीfields

//Component.vue 
computed : { 
    subsetOfFields() { 
     // Something else in component data determines this list 
    } 
} 

के एक सबसेट मैं jasmine इस तरह मेरी इकाई परीक्षण के सभी सेट किया हुआ हो कि है और वे ठीक काम करते हैं।

//Component.spec.js 
import Vue from 'vue' 
import MyComponent from 'Component.vue' 
describe("Component test", function() { 
     var myComponentVar = new Vue(MyComponent); 
     var vm = myComponentVar.$mount(); 

     beforeEach(function() { 
     vm = myComponentVar.$mount(); 
    ); 

     afterEach(function() { 
     vm = myComponentVar.$destroy(); 
     }); 

     it("First spec tests something", function() { 
      ... 
     }); 

}); 

सब कुछ, spec अंदर कुछ कर रही है, तो data वस्तुओं पर दावे चल बस ठीक काम करता है। हालांकि, subsetOfFields पर एक दावा चलाना हमेशा खाली सरणी देता है। ऐसा क्यों? इसका परीक्षण करने में सक्षम होने के लिए मुझे क्या करना चाहिए?

FYI करें, मैं भी कल्पना एक और describe ब्लॉक के अंदर घोंसला बनाने से और फिर एक beforeEach जो fields सरणी initializes जोड़ने की कोशिश की। काम नहीं किया।

हालांकि, सामान्य beforeEach फ़ंक्शन के अंदर fields प्रारंभ करना कार्य किया। लेकिन मैं अन्य चश्मा के लिए उस नकली डेटा के साथ fields सरणी शुरू करना नहीं चाहता हूं।

+0

वास्तविक वू प्रोजेक्ट के लिए यह घटक.spec.js है। आप वहां पर जो चाहिए उसे ढूंढ सकते हैं। https://github.com/vuejs/vue/blob/dev/test/unit/features/options/computed.spec.js – Bert

+0

@BertEvans, मैंने पहले से ही उस उदाहरण में तकनीक की कोशिश की है। वह पहले से मौजूद डेटा के साथ घटक शुरू कर रहा है। हालांकि लाइन 18 में, 'ए' के ​​लिए डेटा 1 से 2 में बदलता है और 1 9 में 'बी' में परिवर्तन की उम्मीद है। मैंने वही काम किया लेकिन यह काम नहीं कर रहा है और मैं यह नहीं समझ सकता कि क्यों। –

उत्तर

3

मैं इस लिंक है कि परीक्षण और अनुभाग आप है को देखने के लिए Vue.nextTick (...) अनुभाग

https://alligator.io/vuejs/unit-testing-karma-mocha/

ब्लॉक के बारे में मैं बात कर रहा हूँ की आवश्यकता होगी के बारे में बात में आए नीचे है:

import Vue from 'vue'; 
// The path is relative to the project root. 
import TestMe2 from 'src/components/TestMe2'; 

describe('TestMe2.vue',() => { 
    ... 
    it(`should update when dataText is changed.`, done => { 
    const Constructor = Vue.extend(TestMe2); 

    const comp = new Constructor().$mount(); 

    comp.dataProp = 'New Text'; 

    Vue.nextTick(() => { 
     expect(comp.$el.textContent) 
     .to.equal('New Text'); 
     // Since we're doing this asynchronously, we need to call done() to tell Mocha that we've finished the test. 
     done(); 
    }); 
    }); 
}); 
+1

गुणवत्ता उत्तर प्रदान करने के लिए कृपया इसे [कैसे-जवाब दें] (http://stackoverflow.com/help/how-to-answer) पढ़ें। – thewaywewere

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