Description
Subject of the issue
I have the following component
<template>
<div>{{someData}}</div>
</template>
<script lang="ts">
import { Component, Vue } from 'vue-property-decorator';
@Component
export default class App extends Vue {
private someData = this.$t("message");
}
</script>
and the following unit test
import { mount } from '@vue/test-utils'
import App from '@/App.vue'
describe('App.vue', () => {
it('some unit test', () => {
const wrapper = mount(App, {
mocks: {
$t: (key: string) => key
}
});
expect(wrapper).toBeDefined();
})
})
When running this unit test, it fails with the following error:
FAIL tests/unit/example.spec.ts
HelloWorld.vue
✕ some unit test (22ms)
● HelloWorld.vue › some unit test
TypeError: this.$t is not a function
8 | @Component
9 | export default class App extends Vue {
> 10 | private someData = this.$t("message");
| ^
11 | }
12 | </script>
13 |
at new App (src/App.vue:10:1)
at collectDataFromConstructor (node_modules/vue-class-component/dist/vue-class-component.common.js:165:14)
at VueComponent.data (node_modules/vue-class-component/dist/vue-class-component.common.js:227:14)
at getData (node_modules/vue/dist/vue.runtime.common.dev.js:4732:17)
at initData (node_modules/vue/dist/vue.runtime.common.dev.js:4689:7)
at initState (node_modules/vue/dist/vue.runtime.common.dev.js:4628:5)
at VueComponent.Vue._init (node_modules/vue/dist/vue.runtime.common.dev.js:4987:5)
at new VueComponent (node_modules/vue/dist/vue.runtime.common.dev.js:5134:12)
at createComponentInstanceForVnode (node_modules/vue/dist/vue.runtime.common.dev.js:3277:10)
at init (node_modules/vue/dist/vue.runtime.common.dev.js:3108:45)
at createComponent (node_modules/vue/dist/vue.runtime.common.dev.js:5958:9)
at createElm (node_modules/vue/dist/vue.runtime.common.dev.js:5905:9)
at VueComponent. [as ____] (node_modules/vue/dist/vue.runtime.common.dev.js:6455:7)
at VueComponent.Vue._update (node_modules/vue/dist/vue.runtime.common.dev.js:3933:19)
at VueComponent.updateComponent (node_modules/vue/dist/vue.runtime.common.dev.js:4054:10)
at Watcher.get (node_modules/vue/dist/vue.runtime.common.dev.js:4465:25)
at new Watcher (node_modules/vue/dist/vue.runtime.common.dev.js:4454:12)
at mountComponent (node_modules/vue/dist/vue.runtime.common.dev.js:4061:3)
at VueComponent.Object.<anonymous>.Vue.$mount (node_modules/vue/dist/vue.runtime.common.dev.js:8392:10)
at mount (node_modules/@vue/test-utils/dist/vue-test-utils.js:13991:21)
at Object.<anonymous> (tests/unit/example.spec.ts:6:21)
Steps to reproduce
Just run unit tests in this project:
i18n-test.zip
Expected behaviour
Error this.$t is not a function
should not occur. The $t
function is mocked.
Actual behaviour
An error this.$t is not a function
is thrown.
Additional context
If I convert someData
to computed property, like this:
<template>
<div>{{someData}}</div>
</template>
<script lang="ts">
import { Component, Vue } from 'vue-property-decorator';
@Component
export default class App extends Vue {
private get someData() {
return this.$t("message");
}
</script>
the error is gone.