2017-10-05 1 views
2

J'utilise Vue 2 pour améliorer un moteur Ruby on Rails, en utilisant les attributs inline-template dans les vues Haml existantes comme modèles pour mes composants Vue.Test d'unité composant vue.js avec inline-template

Est-il possible de tester les méthodes d'un composant défini comme ça? Tous les exemples de tests que je peux trouver supposent l'utilisation de composants à un seul fichier .vue.

Ces tests (en utilisant Mocha et Chai) échouent avec [Vue warn]: Failed to mount component: template or render function not defined.

Exemple Composant:

//main-nav.js 

import Vue from 'vue' 
const MainNav = { 
    data: function() { 
    return {open: true} 
    }, 

    methods: { 
    toggleOpen: function(item) { 
     item.open = !item.open 
    } 
    } 
} 

export default MainNav 

Exemple Test:

//main-nav.test.js 
import MainNav from '../../admin/main-nav' 

describe('MainNav',() => { 
    let Constructor 
    let vm 

    beforeEach(() => { 
    Constructor = Vue.extend(MainNav) 
    vm = new Constructor().$mount() 
    }) 

    afterEach(() => { 
    vm.$destroy() 
    }) 

    describe('toggleOpen',() => { 
    it('has a toggleOpen function',() => { 
     expect(vm.MainNav.toggleOpen).to.be.a('function') 
    }) 

    it('toggles open from true to false',() => { 
     const result = MainNav.toggleOpen({'open': true}) 
     expect(result).to.include({open: false}) 
    }) 
    }) 
}) 

Répondre

0

Il se trouve que vous pouvez toujours spécifier un modèle dans la fichier de composant, et tous les modèles inline-template seront utilisés en faveur de cela.