diff --git a/packages/@vue/cli/lib/__tests__/options.js b/packages/@vue/cli/lib/__tests__/options.js index db01ce0d5..40e549559 100644 --- a/packages/@vue/cli/lib/__tests__/options.js +++ b/packages/@vue/cli/lib/__tests__/options.js @@ -1,5 +1,66 @@ jest.mock('fs') -it('should pass', () => { +const fs = require('fs') +const { + rcPath, + saveOptions, + loadSavedOptions, + savePartialOptions +} = require('../options') +it('save options', () => { + saveOptions({ + packageManager: 'npm', + plugins: {}, + foo: 'bar' + }) + const options = JSON.parse(fs.readFileSync(rcPath, 'utf-8')) + expect(options).toEqual({ + packageManager: 'npm', + plugins: {} + }) +}) + +it('load options', () => { + expect(loadSavedOptions()).toEqual({ + packageManager: 'npm', + plugins: {} + }) + fs.unlinkSync(rcPath) + expect(loadSavedOptions()).toEqual({}) +}) + +it('save partial options', () => { + savePartialOptions({ + packageManager: 'yarn' + }) + expect(loadSavedOptions()).toEqual({ + packageManager: 'yarn' + }) + + savePartialOptions({ + plugins: { + foo: { a: 1, b: 2 } + } + }) + expect(loadSavedOptions()).toEqual({ + packageManager: 'yarn', + plugins: { + foo: { a: 1, b: 2 } + } + }) + + savePartialOptions({ + plugins: { + foo: { a: 2, c: 3 }, + bar: { d: 4 } + } + }) + expect(loadSavedOptions()).toEqual({ + packageManager: 'yarn', + plugins: { + foo: { a: 2, b: 2, c: 3 }, + bar: { d: 4 } + } + }) }) diff --git a/packages/@vue/cli/lib/options.js b/packages/@vue/cli/lib/options.js index 9dc93c7a5..3c935e6b8 100644 --- a/packages/@vue/cli/lib/options.js +++ b/packages/@vue/cli/lib/options.js @@ -64,7 +64,7 @@ const isObject = val => val && typeof val === 'object' function deepMerge (to, from) { for (const key in from) { if (isObject(to[key]) && isObject(from[key])) { - to[key] = deepMerge(to[key], from[key]) + deepMerge(to[key], from[key]) } else { to[key] = from[key] }