TransWikia.com

Como testar exports de um package?

Stack Overflow em Português Asked by Felipe Avelar on January 11, 2021

Eu tenho um arquivo index.ts que é responsável por exportar todas os componentes da seguinte forma:

export * from './components/com1'
export * from './components/com2'
export * from './components/com3'
export * from './components/com4'

E uma organização de pastas

src
|---components
    |---com1
    |---com2
    |---com3
    |---com4
index.ts

A minha dúvida é se é possível eu verificar se o index.ts tem a exportação de todos os componentes dentro da pasta components nele… No caso, é possível verificar se todos os componentes tem um export dentro do index.ts através de testes?

One Answer

Seguindo a sua lógica, a unica forma possivel (acredito) seria fazendo um "depara" de todos os componentes requeridos para que a aplicação rode.

Na arquitetura:

 src
|---components
    |---com1
      --> export function com1();
    |---com2
      --> export function com4();
    |---com3
      --> export function com4();
    |---com4
      --> export function com4();
index.ts

Dentro de index se você fizer

export * from './components/com1'
export * from './components/com2'
export * from './components/com3'
export * from './components/com4'

console.log(Object.keys(this));
console.log(hasAllExportFunctionExists(this));

function hasAllExportFunctionExists(objectStruct: any) {
    let exportedDeparaRequired = [
        "com1",
        "com2",
        "com3",
        "com4"
    ];
    return Object.keys(objectStruct).every(v => exportedDeparaRequired.includes(v));
}

Com o seu tsconfig.json desta forma:

{
    "compilerOptions": {
      "target": "es6",
      "module": "commonjs",
      "lib": [
        "dom",
        "es6",
        "es2017",
        "esnext.asynciterable"
      ],
      "sourceMap": true,
      "outDir": "./build",
      "moduleResolution": "node",
      "removeComments": true,
      "noImplicitAny": true,
      "strictNullChecks": true,
      "strictFunctionTypes": true,
      "noImplicitThis": true,
      "noUnusedLocals": false,
      "noUnusedParameters": false,
      "noImplicitReturns": true,
      "noFallthroughCasesInSwitch": true,
      "allowSyntheticDefaultImports": true,
      "esModuleInterop": true,
      "emitDecoratorMetadata": true,
      "experimentalDecorators": true,
      "resolveJsonModule": true,
      "skipLibCheck": true,
      "baseUrl": "./"
    },
    "exclude": [
      "node_modules"
    ],
    "include": [
      "./src/**/*.ts"
    ]
  }

o tsc irá compilar para algo parecido com isso:

"use strict";
function __export(m) {
    for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];
}
Object.defineProperty(exports, "__esModule", { value: true });
__export(require("./components/com1"));
__export(require("./components/com2"));
__export(require("./components/com3"));
__export(require("./components/com4"));
console.log(Object.keys(this));
hasAllExportFunctionExists(this);
function hasAllExportFunctionExists(objectStruct) {
    let exportedDeparaRequired = [
        "com1",
        "com2",
        "com3",
        "com4"
    ];
    return Object.keys(objectStruct).every(v => exportedDeparaRequired.includes(v));
}

O que irá retornar no "node index.js"

['com1', 'com2', 'com3', 'com4' ]
true

Correct answer by Bruno Luiz K. on January 11, 2021

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP