From 08caaa4ae72265c27933f3a3a17f0efa46592c4e Mon Sep 17 00:00:00 2001 From: sun0day Date: Thu, 17 Nov 2022 14:54:21 +0800 Subject: [PATCH] test: improve node/build.ts ut coverage (#10786) test: improve `node/build.ts` ut coverage - statements 48.32% branches 74.35% functions 26.82% lines 48.32% --- .../vite/src/node/__tests__/build.spec.ts | 85 +++++++++++++++++-- 1 file changed, 80 insertions(+), 5 deletions(-) diff --git a/packages/vite/src/node/__tests__/build.spec.ts b/packages/vite/src/node/__tests__/build.spec.ts index ecd0b187b78a12..b329f91d348959 100644 --- a/packages/vite/src/node/__tests__/build.spec.ts +++ b/packages/vite/src/node/__tests__/build.spec.ts @@ -1,5 +1,6 @@ import { resolve } from 'node:path' import { fileURLToPath } from 'node:url' +import colors from 'picocolors' import type { Logger } from 'vite' import { describe, expect, test, vi } from 'vitest' import type { OutputOptions } from 'rollup' @@ -350,9 +351,19 @@ describe('resolveBuildOutputs', () => { name: 'entryA' } - const outputs = resolveBuildOutputs(undefined, libOptions, {} as Logger) - - expect(outputs).toEqual([{ format: 'es' }, { format: 'umd' }]) + expect(resolveBuildOutputs(undefined, libOptions, {} as Logger)).toEqual([ + { format: 'es' }, + { format: 'umd' } + ]) + expect( + resolveBuildOutputs({ name: 'A' }, libOptions, {} as Logger) + ).toEqual([ + { format: 'es', name: 'A' }, + { format: 'umd', name: 'A' } + ]) + expect( + resolveBuildOutputs([{ name: 'A' }], libOptions, {} as Logger) + ).toEqual([{ name: 'A' }]) }) test('default format: multiple entries', () => { @@ -360,8 +371,72 @@ describe('resolveBuildOutputs', () => { entry: ['entryA.js', 'entryB.js'] } - const outputs = resolveBuildOutputs(undefined, libOptions, {} as Logger) + expect(resolveBuildOutputs(undefined, libOptions, {} as Logger)).toEqual([ + { format: 'es' }, + { format: 'cjs' } + ]) + expect( + resolveBuildOutputs({ name: 'A' }, libOptions, {} as Logger) + ).toEqual([ + { format: 'es', name: 'A' }, + { format: 'cjs', name: 'A' } + ]) + expect( + resolveBuildOutputs([{ name: 'A' }], libOptions, {} as Logger) + ).toEqual([{ name: 'A' }]) + }) + + test('umd or iife: should not support multiple entries', () => { + ;['umd', 'iife'].forEach((format) => { + expect(() => + resolveBuildOutputs( + undefined, + { + entry: ['entryA.js', 'entryB.js'], + formats: [format as LibraryFormats] + }, + {} as Logger + ) + ).toThrow( + `Multiple entry points are not supported when output formats include "umd" or "iife".` + ) + }) + }) - expect(outputs).toEqual([{ format: 'es' }, { format: 'cjs' }]) + test('umd or iife: should define build.lib.name', () => { + ;['umd', 'iife'].forEach((format) => { + expect(() => + resolveBuildOutputs( + undefined, + { + entry: 'entryA.js', + formats: [format as LibraryFormats] + }, + {} as Logger + ) + ).toThrow( + `Option "build.lib.name" is required when output formats include "umd" or "iife".` + ) + }) + }) + + test('array outputs: should ignore build.lib.formats', () => { + // @ts-expect-error mock Logger + const log = { warn: vi.fn() } as Logger + expect( + resolveBuildOutputs( + [{ name: 'A' }], + { + entry: 'entryA.js', + formats: ['es'] + }, + log + ) + ).toEqual([{ name: 'A' }]) + expect(log.warn).toHaveBeenLastCalledWith( + colors.yellow( + `"build.lib.formats" will be ignored because "build.rollupOptions.output" is already an array format.` + ) + ) }) })