Мне нужно добавить плагины в мои тесты, иначе я получаю ЖУРНАЛ ОШИБОК

Я хочу протестировать компонент vuejs, где я вызовите vue-i18n $t() для перевода мои тексты и this.$route.name.

Созданный мной тест прошел успешно, но со множеством ERROR LOG:

ЖУРНАЛ ОШИБОК: '[Предупреждение Vue]: Ошибка в функции рендеринга: "Ошибка типа: undefined не является функцией (оценка' _vm. $ T ('contact') ')"


ЖУРНАЛ ОШИБОК: '[Предупреждение Vue]: Ошибка в смонтированном хуке: «TypeError: undefined не является объектом (оценка' this. $ Route.name ')»

Вот мой main.js

import Vue from 'vue';
import VueI18n from 'vue-i18n'

import router from './router';

import messages from './messages';

Vue.use(VueI18n);

const i18n = new VueI18n({
    fallbackLocale: 'fr',
    locale: 'fr',
    messages,
});

Vue.config.productionTip = false

let vm = new Vue({
    el: '#app',

    i18n,

    router,
});

// Once page is reloaded
i18n.locale = vm.$route.params.locale;

А вот и мой тест: MyComponent.spec.js

describe('MyComponent', () => {
 // other tests on the object MyComponent (not its instance)

 // Mount an instance and inspect the render output
    it('renders the correct message', () => {
        const Ctor = Vue.extend(MyComponent);
        const vm = new Ctor().$mount();
    });
});

Когда я пытаюсь ввести i18n:

  import VueI18n from 'vue-i18n'

  const vm = new Ctor(new VueI18n({fallbackLocale: 'fr', locale: 'fr', messages,})).$mount();

Я получаю эту ошибку

PhantomJS 2.1.1 (Linux 0.0.0) ERROR TypeError: undefined не является объектом (оценка 'Vue.config')


package.json

"dependencies": {
    ...
    "vue": "^2.3.3",
    "vue-i18n": "^7.1.1",
    "vue-router": "^2.6.0"
},
"devDependencies": {
    ....,
    "chai": "^3.5.0",
    "karma": "^1.4.1",
    "karma-coverage": "^1.1.1",
    "karma-mocha": "^1.3.0",
    "karma-phantomjs-launcher": "^1.0.2",
    "karma-phantomjs-shim": "^1.4.0",
    "karma-sinon-chai": "^1.3.1",
    "karma-sourcemap-loader": "^0.3.7",
    "karma-spec-reporter": "0.0.31",
    "karma-webpack": "^2.0.2",
    "sinon": "^2.1.0",
    "sinon-chai": "^2.8.0",
    "phantomjs-prebuilt": "^2.1.14",
    "mocha": "^3.2.0",
}

person smarber    schedule 08.08.2017    source источник
comment
Как вы импортируете VueI18n в свой тестовый скрипт?   -  person thanksd    schedule 08.08.2017
comment
@thanksd так же, как я это делаю в своем main.js (я обновил свой вопрос)   -  person smarber    schedule 08.08.2017


Ответы (1)


Я использовал avoriaz, чтобы исправить свою проблему, и через mount метод, я мог бы ввести зависимость компонента.

MyComponent.spec.js

import Vue from 'vue';
import VueI18n from 'vue-i18n';
import { mount } from 'avoriaz';

import MyComponent from '@/components/my_component/MyComponent.js';

Vue.use(VueI18n);

describe('MyComponent', () => {
    const i18n = new VueI18n({
        locale: 'fr',
        messages,
    });
    const $route = { name: 'toto' };

    const wrapper = mount(MyComponent, {
        i18n,
    });

    it('renders the correct message', () => {
        expect(wrapper.text()).to.contains('CONTACT');
    });
});
person smarber    schedule 10.08.2017