faceyspacey/react-universal-component

View on GitHub
__tests__/utils.js

Summary

Maintainability
A
0 mins
Test Coverage
import { createPath } from '../__test-helpers__'

import { tryRequire, resolveExport, findExport } from '../src/utils'

import requireById from '../src/requireById'

test('tryRequire: requires module using key export finder + calls onLoad with module', () => {
  const moduleEs6 = createPath('es6')
  const expectedModule = require(moduleEs6)

  // babel
  let mod = tryRequire(moduleEs6)
  expect(mod).toEqual(expectedModule)

  // webpack
  global.__webpack_require__ = path => __webpack_modules__[path]
  global.__webpack_modules__ = {
    [moduleEs6]: expectedModule
  }

  mod = tryRequire(moduleEs6)
  expect(mod).toEqual(expectedModule)

  delete global.__webpack_require__
  delete global.__webpack_modules__

  // module not found
  mod = tryRequire('/foo')
  expect(mod).toEqual(null)
})

test('requireById: requires module for babel or webpack depending on environment', () => {
  const moduleEs6 = createPath('es6')
  const expectedModule = require(moduleEs6)

  // babel
  let mod = requireById(moduleEs6)
  expect(mod).toEqual(expectedModule)

  // webpack
  global.__webpack_require__ = path => __webpack_modules__[path]
  global.__webpack_modules__ = {
    [moduleEs6]: expectedModule
  }

  mod = requireById(moduleEs6)
  expect(mod).toEqual(expectedModule)

  delete global.__webpack_require__
  delete global.__webpack_modules__

  // module not found
  expect(() => requireById('/foo')).toThrow()
})

test('resolveExport: finds export and calls onLoad', () => {
  const onLoad = jest.fn()
  const mod = { foo: 'bar' }
  const props = { baz: 123 }

  const exp = resolveExport(mod, 'foo', onLoad, undefined, props)
  expect(exp).toEqual('bar')

  const info = { isServer: false, isSync: false }
  expect(onLoad).toBeCalledWith(mod, info, props)
  // todo: test caching
})

test('findExport: finds export in module via key string, function or returns module if key === null', () => {
  const mod = { foo: 'bar' }

  // key as string
  let exp = findExport(mod, 'foo')
  expect(exp).toEqual('bar')

  // key as function
  exp = findExport(mod, mod => mod.foo)
  expect(exp).toEqual('bar')

  // key as null
  exp = findExport(mod, null)
  expect(exp).toEqual(mod)

  // default: no key
  exp = findExport({ __esModule: true, default: 'baz' })
  expect(exp).toEqual('baz')
})