diff --git a/e2e/2.x/custom-block/__snapshots__/test.js.snap b/e2e/2.x/custom-block/__snapshots__/test.js.snap new file mode 100644 index 00000000..ef2992b5 --- /dev/null +++ b/e2e/2.x/custom-block/__snapshots__/test.js.snap @@ -0,0 +1,30 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`Basic 1`] = ` +[ + { + "en": { + "hello": "Hello!", + }, + "ja": { + "hello": "こんにちは!", + }, + }, +] +`; + +exports[`Multiple blocks 1`] = ` +[ + { + "en": { + "hello": "Hello!", + }, + "ja": { + "hello": "こんにちは!", + }, + }, + { + "foo": "foo", + }, +] +`; diff --git a/e2e/2.x/custom-block/babel.config.js b/e2e/2.x/custom-block/babel.config.js new file mode 100644 index 00000000..7db9b6f5 --- /dev/null +++ b/e2e/2.x/custom-block/babel.config.js @@ -0,0 +1,3 @@ +module.exports = { + presets: ['@babel/preset-env'] +} diff --git a/e2e/2.x/custom-block/components/Basic.vue b/e2e/2.x/custom-block/components/Basic.vue new file mode 100644 index 00000000..b40054ac --- /dev/null +++ b/e2e/2.x/custom-block/components/Basic.vue @@ -0,0 +1,20 @@ + + + + + +{ + "en": { + "hello": "Hello!" + }, + "ja": { + "hello": "こんにちは!" + } +} + diff --git a/e2e/2.x/custom-block/components/Multiple.vue b/e2e/2.x/custom-block/components/Multiple.vue new file mode 100644 index 00000000..f204d041 --- /dev/null +++ b/e2e/2.x/custom-block/components/Multiple.vue @@ -0,0 +1,26 @@ + + + + + +{ + "en": { + "hello": "Hello!" + }, + "ja": { + "hello": "こんにちは!" + } +} + + + +{ + "foo": "foo" +} + diff --git a/e2e/2.x/custom-block/package.json b/e2e/2.x/custom-block/package.json new file mode 100644 index 00000000..0b0442f6 --- /dev/null +++ b/e2e/2.x/custom-block/package.json @@ -0,0 +1,41 @@ +{ + "name": "vue2-custom-block", + "version": "1.0.0", + "license": "MIT", + "private": true, + "scripts": { + "test": "jest --no-cache --coverage test.js" + }, + "dependencies": { + "vue": "^2.7.7", + "vue-template-compiler": "^2.7.7" + }, + "devDependencies": { + "@babel/core": "^7.9.0", + "@babel/preset-env": "^7.9.0", + "@vue/vue2-jest": "^29.0.0", + "jest": "29.x", + "jest-environment-jsdom": "29.x" + }, + "jest": { + "moduleFileExtensions": [ + "js", + "json", + "vue" + ], + "transform": { + "^.+\\.js$": "babel-jest", + "^.+\\.vue$": "@vue/vue2-jest" + }, + "moduleNameMapper": { + "^~?__styles/(.*)$": "/components/styles/$1" + }, + "globals": { + "vue-jest": { + "transform": { + "custom": "./transformer.js" + } + } + } + } +} diff --git a/e2e/2.x/custom-block/test.js b/e2e/2.x/custom-block/test.js new file mode 100644 index 00000000..79556a9c --- /dev/null +++ b/e2e/2.x/custom-block/test.js @@ -0,0 +1,33 @@ +import Basic from './components/Basic.vue' +import Multiple from './components/Multiple.vue' + +test('Basic', () => { + expect(Basic.__custom).toMatchObject([ + { + en: { + hello: 'Hello!' + }, + ja: { + hello: 'こんにちは!' + } + } + ]) + expect(Basic.__custom).toMatchSnapshot() +}) + +test('Multiple blocks', () => { + expect(Multiple.__custom).toMatchObject([ + { + en: { + hello: 'Hello!' + }, + ja: { + hello: 'こんにちは!' + } + }, + { + foo: 'foo' + } + ]) + expect(Multiple.__custom).toMatchSnapshot() +}) diff --git a/e2e/2.x/custom-block/transformer.js b/e2e/2.x/custom-block/transformer.js new file mode 100644 index 00000000..b0266930 --- /dev/null +++ b/e2e/2.x/custom-block/transformer.js @@ -0,0 +1,21 @@ +function convert(content) { + return JSON.stringify(JSON.parse(content)) + .replace(/\u2028/g, '\\u2028') // LINE SEPARATOR + .replace(/\u2029/g, '\\u2029') // PARAGRAPH SEPARATOR + .replace(/\\/g, '\\\\') + .replace(/'/g, "\\'") +} + +module.exports = { + process({ blocks, vueOptionsNamespace, filename, config }) { + const ret = blocks.reduce((codes, block) => { + codes.push( + `${vueOptionsNamespace}.__custom = ${vueOptionsNamespace}.__custom || [];${vueOptionsNamespace}.__custom.push(${convert( + block.content + )});` + ) + return codes + }, []) + return ret.join('') + } +} diff --git a/e2e/2.x/custom-transformers/components/Scss.vue b/e2e/2.x/custom-transformers/components/Scss.vue index 6b88eb24..474edea9 100644 --- a/e2e/2.x/custom-transformers/components/Scss.vue +++ b/e2e/2.x/custom-transformers/components/Scss.vue @@ -1,7 +1,7 @@ diff --git a/packages/vue2-jest/lib/process-custom-blocks.js b/packages/vue2-jest/lib/process-custom-blocks.js index a7e75fff..17516fa5 100644 --- a/packages/vue2-jest/lib/process-custom-blocks.js +++ b/packages/vue2-jest/lib/process-custom-blocks.js @@ -1,4 +1,5 @@ const { getVueJestConfig, getCustomTransformer } = require('./utils') +const vueOptionsNamespace = require('./constants').vueOptionsNamespace function applyTransformer( transformer, @@ -16,7 +17,7 @@ function groupByType(acc, block) { return acc } -module.exports = function(allBlocks, filename, componentNamespace, config) { +module.exports = function(allBlocks, filename, config) { const blocksByType = allBlocks.reduce(groupByType, {}) const code = [] for (const [type, blocks] of Object.entries(blocksByType)) { @@ -28,7 +29,7 @@ module.exports = function(allBlocks, filename, componentNamespace, config) { const codeStr = applyTransformer( transformer, blocks, - componentNamespace, + vueOptionsNamespace, filename, config ) diff --git a/packages/vue2-jest/lib/process.js b/packages/vue2-jest/lib/process.js index 6256144c..ebcdfdd8 100644 --- a/packages/vue2-jest/lib/process.js +++ b/packages/vue2-jest/lib/process.js @@ -10,7 +10,6 @@ const loadSrc = require('./utils').loadSrc const babelTransformer = require('babel-jest').default const generateCode = require('./generate-code') const mapLines = require('./map-lines') -const vueComponentNamespace = require('./constants').vueComponentNamespace let isVue27 = false let compilerUtils @@ -143,9 +142,6 @@ module.exports = function(src, filename, config) { filename }) - const componentNamespace = - getVueJestConfig(config)['componentNamespace'] || vueComponentNamespace - const templateResult = processTemplate(descriptor, filename, config) const scriptResult = processScript(descriptor.script, filename, config) const scriptSetupResult = processScriptSetup(descriptor, filename, config) @@ -153,7 +149,6 @@ module.exports = function(src, filename, config) { const customBlocksResult = processCustomBlocks( descriptor.customBlocks, filename, - componentNamespace, config ) diff --git a/packages/vue2-jest/package.json b/packages/vue2-jest/package.json index 559801d4..b9bb1a75 100644 --- a/packages/vue2-jest/package.json +++ b/packages/vue2-jest/package.json @@ -1,6 +1,6 @@ { "name": "@vue/vue2-jest", - "version": "29.1.0", + "version": "29.1.1", "description": "Jest transformer for Vue 2", "main": "lib/index.js", "files": [ diff --git a/packages/vue3-jest/package.json b/packages/vue3-jest/package.json index aa8cc824..fb96c4a8 100644 --- a/packages/vue3-jest/package.json +++ b/packages/vue3-jest/package.json @@ -1,6 +1,6 @@ { "name": "@vue/vue3-jest", - "version": "29.1.0", + "version": "29.1.1", "description": "Jest Vue transform", "main": "lib/index.js", "files": [