NuxtJS+TypeScriptの開発記録 (3) Vueコンポーネントのテスト時エラー
前回までで環境構築が済んだので開発を進めていたが、テストで妙なエラーが出るようになった。
モジュール '@/components/Counter.vue' が見つかりません。
パスにコンポーネントは存在しているし、Nuxtのテストサーバー上で問題なく動作している。また、コンポーネント以外の(モデルクラスなどの)テストは問題ない。
先に結論
- テストのファイルを
Counter.spec.vue
に変更 - テストのファイルをVueのSFCに変更
- Jestの設定変更
原因(推測)
Jestの設定で、以下のようにtransform
を指定している部分がある。
"jest": {
"transform": {
"^.+\\.ts$": "ts-jest",
".*\\.(vue)$": "vue-jest"
}
}
テストファイルCounter.spec.ts
のエラーは
-
.ts
なのでts-jest
で処理される -
.vue
ファイルをimport
しようとする -
ts-jest
が.vue
ファイルをインポートできない
という流れなのではないか?
(前々回で環境を作ったばかりのとき、エラーは起きなかった。その後vue-property-decorator
を使ってクラススタイルで書くようになってから、このようなエラーが起こるようになった気がするが、関係あるのだろうか……?)
対策
原因が推測通りなら、テストファイルもvue-jest
で処理されるようにしてしまえばよいはずである。
Counter.spec.ts
のファイル名をCounter.spec.vue
に変更する。それだけだと文法エラーで怒られるが、以下のようにscript
タグで囲ってやればOK。
<script lang="ts">
import { mount } from '@vue/test-utils';
import Counter from '@/components/Counter.vue';
describe('Counter', () => {
test('is a Vue instance', () => {
const wrapper = mount(Counter);
expect(wrapper.isVueInstance()).toBeTruthy();
});
});
</script>
デフォルトだと.vue
はテストファイルと認識されないため、Jestの設定を変更する。
"jest": {
"testRegex": "(/__tests__/.*|(\\.|/)(spec))\\.(vue|ts)$"
}
JestのtextRegex
のデフォルト値(/__tests__/.*|(\\.|/)(test|spec))\\.[jt]sx?$
を*.spec.ts
と*.spec.vue
が該当するように変更した。
これでVSCode上のエラーも実行時のエラーも消え、無事にテストできるようになった。
Author And Source
この問題について(NuxtJS+TypeScriptの開発記録 (3) Vueコンポーネントのテスト時エラー), 我々は、より多くの情報をここで見つけました https://qiita.com/noonworks/items/c446a52078af9e10899e著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .