是否有一種方法可以在Vue模板和腳本中使用別名來映射vue-jest配置?
P粉476547076
2023-08-26 17:10:07
<p>依賴項: "@vue/cli-plugin-unit-jest": "^4.5.13", "@vue/test-utils": "^1.2.1", &quoquot;vue -jest": "^3.0.7"</p>
<p>我有一個應用程序,在vue.config.js中設定了一個別名(比如說"foo"):</p>
<pre class="brush:php;toolbar:false;">module.exports = {
chainWebpack: (config) => {
// 將項目名稱設定為別名
config.resolve.alias.set('foo', __dirname);
},
};</pre>
<p>對於導入語句與HTML標籤的src屬性...</p>
<p>在main.js中:</p>
<pre class="brush:php;toolbar:false;">...
import App from 'foo/src/components/core/App';
...</pre>
<p>在../src/core/App/index.vue中:</p>
<pre class="lang-html prettyprint-override"><code><script src="foo/src/components/core/App/script.js" />
<style module src="foo/src/components/core/App/style.css" />
<template src="foo/src/components/core/App/template.html" />
</code></pre>
<p>我知道我可以在jest.config.js中使用moduleNameMapper,類似:</p>
<p><code>'^foo(.*)$': '<rootDir>$1',</code></p>
<p>然而,這不會對應出現在HTML標籤的src屬性中的別名。有沒有辦法透過配置設定或其他方式讓vue-jest解釋這些屬性路徑呢? </p>
<p>非常感謝任何建議。 </p>
SFC中的URL解析
vue-jest
無法解析SFC中頂級區塊標籤的src
URL,因此您需要在src/components/core/App/index.vue
中使用未別名的相對路徑:模板內容中的URL解析
vue-jest
使用@vue/component-compiler-utils
編譯模板,但URL解析需要transformAssetUrls
#。vue-jest
3.x不支援向@vue/component-compiler-utils
傳遞選項,但在4.0.0-rc.1#中透過templateCompiler.transformAssetUrls
配置實作。即使啟用了URL解析,Vue CLI配置
jest
以傳回空字串以取得require
的媒體,包括圖片。如果您的測試需要與正常解析的URL一起在生產環境中工作,您將需要一個模仿url-loader
的Jest轉換器。 Vue CLI設定載入器以如果大於4KB,則傳回解析的檔案名稱; 否則傳回base64資料URL。要啟用URL解析:
升級到
vue-jest
4:為自訂的
my-jest-url-loader
建立以下文件,稍後將在下面使用:為了避免意外覆寫Vue CLI的預設Jest預設,使用合併工具(例如
lodash.merge
)在jest.config.js
中插入自訂配置。在Jest全域中新增一個
vue-jest
配置,設定templateCompiler.transformAssetUrls
#。修改合併預設的
transform
屬性,使用我們的my-jest-url-loader
轉換器來處理映像。這需要從預設Jest預設中刪除其他影像轉換器,以避免衝突。GitHub示範
#