Nuxt.jsでSVGをいい感じに使いたいときはnuxt-svg-loaderを使うと便利です。
<template> <div> <icon /> </div> </template> <script lang="ts"> import Icon from '~/assets/svg/icon.svg'; @Component({ components: { Icon } }) export default class Button extends Vue {} </script>
こんな感じで、SVGをコンポーネントのようにimportしてつかえるようになります。非常に便利です。
しかし、SVGをimoprtしたファイルを、Jestをつかってテストしようとすると、
This usually means that you are trying to import a file which Jest cannot parse, e.g. it's not plain JavaScript.
というエラーがでます。どうやらSVGのパースがうまくいかないようです。
これをどうにかするために、jest-svg-transformer を試してみたのですが、
Cannot find module 'react' from 'icon.svg'
というエラーが。
reactが見つからない!とのことなので、
npm install --save-dev react
と、reactを入れてみると、エラーが消えて、無事にテストが通るようになりました!
Vue.js(Nuxt.js)で開発しているプロジェクトに対し、テストのためだけにReactを導入しなければならないのは釈然としないのですが、この方法で乗り切りました。
解決手順
❶ jest-svg-transformerを導入
npm install --save-dev jest-svg-transformer
❷ reactを導入
npm install --save-dev react
❸ jest.config.js で transform に svg を追加
module.exports = { transform: { '^.+\\.svg$': 'jest-svg-transformer' } }
とりあえず、これでエラーが消えて動くようになりました。