私のコンポーネント(メソッド、計算されたプロパティ、データ、...)をテストできるようにする必要があります。私はユニットテストの私VUEコンポーネントをインポートするときしかし、:ユニットテストでは、文字コードのコンポーネントを
import Pagination from 'src/components/shared/pagination.vue'
import { newComponent } from '../component-factory'
describe('pagination.vue',() => {
const propsData = {
metadata: {
page: 2,
records: 155,
total: 11,
},
perPage: 15,
}
it('should have correct number of records',() => {
const ctor = Vue.extend(Pagination)
const vm = new ctor({propsData}).$mount()
expect(vm.firstRecord).toBe(16)
expect(vm.lastRecord).toBe(30)
})
...
vm
をタイプVue
のものであり、したがって、firstRecord
/lastRecord
性質を持っていません。カルマでテストを実行すると、成功を示しているが、typescriptですコンパイラはエラーを吐く:
ERROR in ./tests/shared/pagination.spec.ts
(16,19): error TS2339: Property 'firstRecord' does not exist on type 'Vue'.
ERROR in ./tests/shared/pagination.spec.ts
(17,19): error TS2339: Property 'lastRecord' does not exist on type 'Vue'.
私はキャストを試してみました:
...
const vm = new ctor({propsData}).$mount() as Pagination
...
しかしVSCodeに警告で結果は:
[ts] Cannot find name 'Pagination'.
そしてvm
をタイプany
として治療する効果は完全に逆効果である。はっきり正確ないVue
へのすべての.vue
ファイルの種類を設定します
declare module '*.vue' {
import Vue from 'vue'
export default typeof Vue
}
:
私はこのすべてが.vue
ファイルを使用しているときに宣言を追加する必要があるという事実に由来だと思いますうそだけど、どちらにも役立たない...どんな提案?私は間違って何をしていますか?
今後参考になるように、.vue
ファイルごとに.d.ts
個のファイルを生成するvuetypeを使用しようとしましたが、this issueに及んでいました。また、there is a requestは、.vue
をタイプコピーエコシステムの第一級市民にして、この問題を解消します。 vue language service extension