2017-12-14 2 views
0

새 Vue.js 프로젝트에서 테스트를 실행하는 동안 경고가 표시됩니다. 웹팩을 기반으로카르마 유닛 테스트에서 VueRouter가 정의되지 않았습니다.

ERROR LOG: '[Vue warn]: Error in render: "TypeError: Cannot read property 'resolve' of undefined" 

found in 

---> <RouterLink> 
    <Root>' 
내가 Vue2을 사용하고

프로젝트 : 구성 요소는 프로그래밍 방식 this.$router.push('/');

으로 테스트는 이러한 경고를 전달하지만, 로그인되어 <router-link> 또는으로 템플릿에 라우터 중 하나를 사용하여 어디든지 프로젝트가 cli 도구로 생성됩니다.

내 단위 테스트하는 index.js :

import Vue from 'vue'; 
import VueNativeSock from 'vue-native-websocket'; 
import Router from 'vue-router'; 

Vue.use(Router); 
Vue.use(VueNativeSock, process.env.WEBSOCKET_ADDR, { format: 'json', reconnection: true }); 
Vue.config.productionTip = false; 

const testsContext = require.context('./specs', true, /\.spec$/); 
testsContext.keys().forEach(testsContext); 

const srcContext = require.context('../../src', true, /^\.\/(?!main(\.js)?$)/); 
srcContext.keys().forEach(srcContext); 

내 main.js :

import Vue from 'vue'; 
import VueNativeSock from 'vue-native-websocket'; 
import VueHead from 'vue-head'; 
import App from './App'; 
import router from './router'; 

Vue.config.productionTip = process.env.NODE_ENV === 'production'; 
Vue.use(VueNativeSock, process.env.WEBSOCKET_ADDR, { format: 'json', reconnection: true }); 
Vue.use(VueHead); 

/* eslint-disable no-new */ 
new Vue({ 
    el: '#app', 
    router, 
    template: '<App/>', 
    components: { App }, 
    head: { 
    link: [ 
     { rel: 'icon', href: '/static/favicon-32x32.png', sizes: '32x32', type: 'image/png' }, 
    ], 
    }, 
}); 

난 도망 갈이 경고를 얻을 누락 어떤 생각? 다음과 같을 수

기본 테스트 : 당신의 루트는 테스트 환경에서 어디 설정되지 않을 수 있습니다처럼

import Vue from 'vue'; 
import ViewDTCs from '@/components/ViewDTCs'; 

describe('ViewDTCs.vue',() => { 
    const Constructor = Vue.extend(ViewDTCs); 
    const vm = new Constructor().$mount(); 
    ViewDTCs.$socket = new WebSocket(process.env.WEBSOCKET_ADDR); 
    it('has a created hook',() => { 
    expect(typeof ViewDTCs.created).to.equal('function'); 
    }); 
    it('should render page',() => { 
    expect(vm.$el.textContent).to.contain('Retrieving DTCs'); 
    }); 
}); 

답변

1

것 같습니다. 당신이 카르마와 Avoriaz 또는 Vue Test Utils를 사용하는 경우,이 같은 경로를 포함하는 구성 요소를 테스트 할 수있었습니다 :

import { mount } from 'vue-test-utils' 
import router from 'src/router' // path to your router 
import MyComponent from 'src/components/MyComponent' 

describe('MyComponent.vue',() => { 
    let wrapper 

    beforeEach(() => { 
    wrapper = mount(MyComponent, { 
     router: router 
    }) 
    }) 

    it('has a created hook',() => { 
    expect(typeof wrapper.created).to.equal('function') 
    }) 
    ... 
}) 
+0

감사 - 나는 당신이 뭔가에 분명히 것 같아요. Vue 구성 요소 중 하나에 대한 예제 테스트를 추가했습니다. 나는 카르마를 사용하고있다. 당신의 예는'wrapper'를 정의하지 않은 채로 남겨두고있다. - 나는 beforeEach가 제대로 실행되는지 확신하지 못한다. 거기에 라우터를 지미하기 위해 현재 생성자와 할 수있는 일이 있습니까? –

+0

@Vouure Vue의 공식적인 단위 테스트 라이브러리이기 때문에'vue-test-utils'를 사용하는 것이 좋습니다. 나는 몇 백 가지의 테스트에서 이것을 어떻게 사용 하는지를 보여주기 위해 좀 더 완벽한 예제를 추가했다. (위의'mount' 함수에서 라우터를 구성 요소에 넣고있다.) – Franey

+0

예! 그게 다 고쳐 졌어. 당신의 도움을 주셔서 감사합니다 –

관련 문제