Existe-t-il un moyen d'utiliser des alias dans les modèles et scripts Vue pour mapper la configuration de vue-jest ?
P粉476547076
P粉476547076 2023-08-26 17:10:07
0
1
488
<p>Dépendances : "@vue/cli-plugin-unit-jest" : "^4.5.13", "@vue/test-utils" : "^1.2.1", "vue - plaisanterie" : "^3.0.7"&Lt ;/p> ; <p>J'ai une application qui définit un alias (disons "foo") dans vue.config.js :</p> <pre class="brush:php;toolbar:false;">module.exports = { chainWebpack : (config) => //Définit le nom du projet comme alias config.resolve.alias.set('foo', __dirname); }, };</pré> <p>Pour les instructions d'importation et les attributs src des balises HTML...</p> <p>Dans main.js :</p> <pre class="brush:php;toolbar:false;">... importer l'application depuis 'foo/src/components/core/App' ; ...</pré> <p>Dans ../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>Je sais que je peux utiliser moduleNameMapper dans jest.config.js, quelque chose comme : </p> <p><code>'^foo(.*)$' : '<rootDir>$1',</code></p> <p>Cependant, cela ne mappe pas les alias qui apparaissent dans l'attribut src d'une balise HTML. Existe-t-il un moyen pour que vue-jest interprète ces chemins de propriété via les paramètres de configuration ou d'autres moyens ? </p> <p>Tout conseil est grandement apprécié. </p>
P粉476547076
P粉476547076

répondre à tous(1)
P粉256487077

Analyse d'URL dans SFC

Utilisation de chemins relatifs sans alias dans

vue-jest无法解析SFC中顶级块标签的src URL,因此您需要在src/components/core/App/index.vue : 

<script src="./script.js" />
<style module src="./style.css" />
<template src="./template.html" />

Analyse d'URL dans le contenu du modèle

vue-jest使用@vue/component-compiler-utils编译模板,但URL解析需要transformAssetUrls选项vue-jest 3.x不支持向@vue/component-compiler-utils传递选项,但在4.0.0-rc.1中通过templateCompiler.transformAssetUrlsConfigurationimplémentation.

Même avec l'analyse d'URL activée, Vue CLI configure jest sur Renvoie une chaîne vide pour obtenir les médias de require, y compris les images jest返回空字符串以获取require的媒体,包括图像。如果您的测试需要与正常解析的URL一起在生产环境中工作,您将需要一个模仿url-loader. Si vos tests doivent fonctionner en production avec des URL normalement résolues, vous aurez besoin d'un convertisseur Jest simulé pour url-loader. Le chargeur de configuration Vue CLI renvoie le nom de fichier analysé s'il est supérieur à 4 Ko ; sinon, il renvoie l'URL des données base64.

Pour activer l'analyse d'URL :

    Mise à niveau vers
  1. 4 :

    npm i -D vue-jest@4
    
    vue-jest
  2. Créez le fichier suivant pour votre personnalisation
  3. qui sera utilisé plus tard ci-dessous :

    // <rootDir>/tests/my-jest-url-loader.js
    const urlLoader = require('url-loader')
    
    module.exports = {
      process(src, filename) {
        const urlLoaderOptions = {
          esModule: false,
          limit: 4096,
          fallback: {
            loader: 'file-loader',
            options: {
              esModule: false,
              emitFile: false,
              name: filename,
            },
          },
        }
        const results = urlLoader.call({
          query: urlLoaderOptions,
          resourcePath: filename,
        }, src)
    
        // strip leading Webpack prefix from file path if it exists
        return results.replace(/^module.exports = __webpack_public_path__ \+ /, 'module.exports = ')
      }
    }
    
    my-jest-url-loader
  4. Pour éviter d'écraser accidentellement les préréglages Jest par défaut de Vue CLI, utilisez un outil de fusion (tel que
  5. lodash.merge

    ) pour insérer une configuration personnalisée dans jest.config.js . lodash.merge)在jest.config.js

  6. Ajoutez une
  7. configuration dans

    Jest global et définissez templateCompiler.transformAssetUrls code >. vue-jest配置,设置templateCompiler.transformAssetUrls

  8. Modifiez l'attribut transform du préréglage de fusion et utilisez notre
  9. convertisseur pour traiter l'image. Cela nécessite de supprimer les autres convertisseurs d'images du préréglage Jest par défaut pour éviter les conflits.

    // jest.config.js
    const vueJestPreset = require('@vue/cli-plugin-unit-jest/presets/default/jest-preset')
    const merge = require('lodash.merge') 3️⃣
    
    const newJestPreset = merge(vueJestPreset, {
      globals: { 4️⃣
        'vue-jest': {
          templateCompiler: {
            transformAssetUrls: {
              video: ['src', 'poster'],
              source: 'src',
              img: 'src',
              image: ['xlink:href', 'href'],
              use: ['xlink:href', 'href']
            }
          }
        }
      },
      moduleNameMapper: {
        '^foo/(.*)$': '<rootDir>/',
      },
    })
    
    function useUrlLoaderForImages(preset) { 5️⃣
      const imageTypes = ['jpg', 'jpeg', 'png', 'svg', 'gif', 'webp']
      const imageTypesRegex = new RegExp(`(${imageTypes.join('|')})\|?`, 'ig')
    
      // remove the image types from the transforms
      Object.entries(preset.transform).filter(([key]) => {
        const regex = new RegExp(key)
        return imageTypes.some(ext => regex.test(`filename.${ext}`))
      }).forEach(([key, value]) => {
        delete preset.transform[key]
        const newKey = key.replace(imageTypesRegex, '')
        preset.transform[newKey] = value
      })
    
      preset.transform = {
        ...preset.transform,
        [`.+\.(${imageTypes.join('|')})$`]: '<rootDir>/tests/my-jest-url-loader',
      }
    }
    
    useUrlLoaderForImages(newJestPreset)
    
    module.exports = newJestPreset
    
    transform属性,使用我们的my-jest-url-loader
Démo GitHub

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal