refactor: use __TEST__ flag
This commit is contained in:
		
							parent
							
								
									fec47bb3ac
								
							
						
					
					
						commit
						300a705221
					
				@ -4,9 +4,9 @@ module.exports = {
 | 
			
		||||
  preset: 'ts-jest',
 | 
			
		||||
  globals: {
 | 
			
		||||
    __DEV__: true,
 | 
			
		||||
    __TEST__: true,
 | 
			
		||||
    __VERSION__: lernaJson.version,
 | 
			
		||||
    __BROWSER__: false,
 | 
			
		||||
    __JSDOM__: true,
 | 
			
		||||
    __RUNTIME_COMPILE__: true,
 | 
			
		||||
    __FEATURE_OPTIONS__: true,
 | 
			
		||||
    __FEATURE_SUSPENSE__: true
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										2
									
								
								packages/global.d.ts
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								packages/global.d.ts
									
									
									
									
										vendored
									
									
								
							@ -1,6 +1,6 @@
 | 
			
		||||
// Global compile-time constants
 | 
			
		||||
declare var __DEV__: boolean
 | 
			
		||||
declare var __JSDOM__: boolean
 | 
			
		||||
declare var __TEST__: boolean
 | 
			
		||||
declare var __BROWSER__: boolean
 | 
			
		||||
declare var __RUNTIME_COMPILE__: boolean
 | 
			
		||||
declare var __COMMIT__: string
 | 
			
		||||
 | 
			
		||||
@ -10,10 +10,19 @@ import {
 | 
			
		||||
  mockWarn,
 | 
			
		||||
  createComponent
 | 
			
		||||
} from '@vue/runtime-test'
 | 
			
		||||
import { setErrorRecovery } from '../src/errorHandling'
 | 
			
		||||
 | 
			
		||||
describe('error handling', () => {
 | 
			
		||||
  mockWarn()
 | 
			
		||||
 | 
			
		||||
  beforeEach(() => {
 | 
			
		||||
    setErrorRecovery(true)
 | 
			
		||||
  })
 | 
			
		||||
 | 
			
		||||
  afterEach(() => {
 | 
			
		||||
    setErrorRecovery(false)
 | 
			
		||||
  })
 | 
			
		||||
 | 
			
		||||
  test('propagation', () => {
 | 
			
		||||
    const err = new Error('foo')
 | 
			
		||||
    const fn = jest.fn()
 | 
			
		||||
@ -384,9 +393,6 @@ describe('error handling', () => {
 | 
			
		||||
  })
 | 
			
		||||
 | 
			
		||||
  it('should warn unhandled', () => {
 | 
			
		||||
    // temporarily simulate non-test env
 | 
			
		||||
    process.env.NODE_ENV = 'dev'
 | 
			
		||||
 | 
			
		||||
    const onError = jest.spyOn(console, 'error')
 | 
			
		||||
    onError.mockImplementation(() => {})
 | 
			
		||||
    const groupCollapsed = jest.spyOn(console, 'groupCollapsed')
 | 
			
		||||
@ -423,7 +429,6 @@ describe('error handling', () => {
 | 
			
		||||
    onError.mockRestore()
 | 
			
		||||
    groupCollapsed.mockRestore()
 | 
			
		||||
    log.mockRestore()
 | 
			
		||||
    process.env.NODE_ENV = 'test'
 | 
			
		||||
  })
 | 
			
		||||
 | 
			
		||||
  // native event handler handling should be tested in respective renderers
 | 
			
		||||
 | 
			
		||||
@ -126,12 +126,15 @@ export function handleError(
 | 
			
		||||
  logError(err, type, contextVNode)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Test-only toggle for testing the uhandled warning behavior
 | 
			
		||||
let forceRecover = false
 | 
			
		||||
export function setErrorRecovery(value: boolean) {
 | 
			
		||||
  forceRecover = value
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function logError(err: Error, type: ErrorTypes, contextVNode: VNode | null) {
 | 
			
		||||
  // default behavior is crash in prod & test, recover in dev.
 | 
			
		||||
  if (
 | 
			
		||||
    __DEV__ &&
 | 
			
		||||
    !(typeof process !== 'undefined' && process.env.NODE_ENV === 'test')
 | 
			
		||||
  ) {
 | 
			
		||||
  if (__DEV__ && (forceRecover || !__TEST__)) {
 | 
			
		||||
    const info = ErrorTypeStrings[type]
 | 
			
		||||
    if (contextVNode) {
 | 
			
		||||
      pushWarningContext(contextVNode)
 | 
			
		||||
 | 
			
		||||
@ -53,7 +53,7 @@ export function warn(msg: string, ...args: any[]) {
 | 
			
		||||
    if (
 | 
			
		||||
      trace.length &&
 | 
			
		||||
      // avoid spamming console during tests
 | 
			
		||||
      (typeof process === 'undefined' || process.env.NODE_ENV !== 'test')
 | 
			
		||||
      !__TEST__
 | 
			
		||||
    ) {
 | 
			
		||||
      warnArgs.push(`\n`, ...formatTrace(trace))
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@ -147,9 +147,11 @@ function createReplacePlugin(
 | 
			
		||||
    __VERSION__: `"${lernaJson.version}"`,
 | 
			
		||||
    __DEV__: isBundlerESMBuild
 | 
			
		||||
      ? // preserve to be handled by bundlers
 | 
			
		||||
        `process.env.NODE_ENV !== 'production'`
 | 
			
		||||
        `(process.env.NODE_ENV !== 'production')`
 | 
			
		||||
      : // hard coded dev/prod builds
 | 
			
		||||
        !isProduction,
 | 
			
		||||
    // this is only used during tests
 | 
			
		||||
    __TEST__: isBundlerESMBuild ? `(process.env.NODE_ENV === 'test')` : false,
 | 
			
		||||
    // If the build is expected to run directly in the browser (global / esm-browser builds)
 | 
			
		||||
    __BROWSER__: isBrowserBuild,
 | 
			
		||||
    // support compile in browser?
 | 
			
		||||
@ -157,9 +159,7 @@ function createReplacePlugin(
 | 
			
		||||
    // support options?
 | 
			
		||||
    // the lean build drops options related code with buildOptions.lean: true
 | 
			
		||||
    __FEATURE_OPTIONS__: !packageOptions.lean && !process.env.LEAN,
 | 
			
		||||
    __FEATURE_SUSPENSE__: true,
 | 
			
		||||
    // this is only used during tests
 | 
			
		||||
    __JSDOM__: false
 | 
			
		||||
    __FEATURE_SUSPENSE__: true
 | 
			
		||||
  })
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user