Ich erhalte Warnungen während Tests, die auf meinem neuen Vue.js-Projekt laufen. Überall dort, wo eine Komponente verwendet, um den Router entweder in der Vorlage als <router-link>
oder programmatisch als this.$router.push('/');
VueRouter ist in Karma-Unit-Tests nicht definiert
Die Tests werden durchzulassen, aber Protokollierung diese Warnungen:
ERROR LOG: '[Vue warn]: Error in render: "TypeError: Cannot read property 'resolve' of undefined"
found in
---> <RouterLink>
<Root>'
ich Vue2 und das Projekt bin mit basiert auf dem webpack Projekt erstellt vom CLI-Tool.
My Unit-Test 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);
Mein 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' },
],
},
});
Jede Idee, was ich vermisse diese Warnungen wegzukommen gehen?
Ein grundlegender Test könnte wie folgt aussehen:
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');
});
});
Danke - ich glaube, Sie sind auf jeden Fall auf etwas. Ich habe einen Beispieltest für eine der Vue-Komponenten hinzugefügt. Ich benutze Karma - dein Beispiel ist, dass "Wrapper" nicht definiert ist - ich bin mir nicht sicher, ob das beforeEach richtig ausgelöst wird. Kann ich etwas mit meinem aktuellen Konstruktor machen, um den Router dort zu jimmy? –
@OKsure Ich empfehle 'vue-test-utils' zu verwenden, da es sich um die offizielle Komponententestbibliothek für Vue handelt. Ich habe ein vollständigeres Beispiel hinzugefügt, um zu zeigen, wie ich es in ein paar hundert Tests verwende (Ich jammy den Router in die Komponente in der "mount" -Funktion oben). – Franey
Ja! Das ist es behoben. danke für Ihre Hilfe –