2016-02-08 18 views
7

Mi piacerebbe testare un componente Vue.js, e non ci riesco. In poche parole, sto impostando una proprietà del componente e voglio affermare che è impostata correttamente. Se ciò è importante, il modulo viene caricato con le esportazioni e JS viene stampato utilizzando Webpack.Test del componente Vue.js

// component 
exports = module.exports = {}; 

module.exports = { 
    data: function() { 
    return { 
     active: false 
    }; 
    }, 
    methods: { 
    'close': function() { 
     console.log(this.active); // -> true 
     this.active = false; 
     console.log(this.active); // -> false 
    } 
    } 
}; 

// component-test 
var modal = require('../../resources/src/js/components/_component.js'); 
var assert = require('assert'); 

describe('close()', function() { 
    beforeEach(function() { 
    modal.data.active = true; 
    }); 
    it('should set modal to inactive', function() { 
    console.log(modal.data.active); // -> true 
    modal.methods.close(); 
    console.log(modal.data.active); // -> true 
    assert.equal(modal.data.active, false); 
    }); 
}); 
+0

così ciò che è effettivamente in mancanza? qual è l'output dei tuoi test? hai controllato la [vue js guide] (http://vuejs.org/guide/application.html#Unit_Testing) sui test? –

+0

controlla anche il [esempio del pacchetto web] (https://github.com/vuejs/vue-loader-example) su github, ci sono alcuni test definiti lì, con karma + jasmine + phantomjs –

risposta

6

Questo dovrebbe darvi un suggerimento su come caricare i componenti di vue durante il test;

var modalComponent = require('../../resources/src/js/components/_component.js'); 
var assert = require('assert');   

//load the component with a vue instance 
vm = new Vue({ 
    template: '<div><test v-ref:test-component></test></div>', 
    components: { 
     'test': modalComponent 
    } 
}).$mount(); 

var modal = vm.$refs.testComponent; 

describe('close()', function() { 
    beforeEach(function() { 
     modal.active = true; 
    }); 

    it('should set modal to inactive', function() { 
     console.log(modal.active); // -> true 
     modal.close(); 
     console.log(modal.active); // -> false 
     assert.equal(modal.active, false); 
    }); 
}); 
+0

per qualche motivo, eseguendo metodi come questo effettua il timeout di PhantomJS. 'PhantomJS 2.1.1 (Mac OS X 0.0.0): Eseguito 0 di 4 DISCONNECTED (10.003 sec/0 sec)' –