..._ 1.default не является конструктором при тестировании TypeScript с Mocha - PullRequest
0 голосов
/ 11 января 2019

Я пытаюсь заставить модульные тесты с мокко работать. Я использую машинопись, которая компилируется в простой JavaScript с помощью TSC. Я всегда получаю сообщение об ошибке:

    src\index.ts:22
        [new FrontendEndpoint(), ...],
         ^
    TypeError: v1_1.default is not a constructor

Я подошел двумя способами (и столкнулся с одной и той же проблемой дважды):

Сначала я создал фиктивный тест test.test.ts, импортируя некоторые из моих модулей для тестирования:


    import { APIServer } from './../api/index';
    import { describe } from 'mocha';
    import FrontendEndpoint from '../api/endpoints/frontend/v1';
    import { SocketConnector } from '../api/sockets/socketio';

    describe('TestTest', () => {
        it('should run', (done) => {
            const server = new APIServer(4000, [new FrontendEndpoint()], new SocketConnector([]));
            done();
        });
    });

  1. Использование ts-mocha

    • Установлено ts-mocha, mocha, @ types / mocha
    • Ран ts-mocha src/test/test.test.ts
  2. Использование mocha и скомпилированных файлов ts

    • установлен мокко, @ types / mocha
    • Ран mocha build/test/test.test.js

Оба способа выдают ошибку выше.

index.ts выглядит так:


    import FrontendEndpoint from './api/endpoints/frontend/v1';
    [...]
    new FrontendEndpoint()

Скомпилировано (index.js):


    [...]
    const v1_1 = require("./api/endpoints/frontend/v1");
    [...]
    new v1_1.default()

И frontend/v1.ts:


    export default class FrontendEndpoint {
        [...]
    }

Скомпилировано (v1.js):


    class FrontendEndpoint {
        [...]
    }
    exports.default = FrontendEndpoint;

Мой tsconfig выглядит так:

{
    "compilerOptions": {
        "target": "es2015",
        "module": "commonjs",
        "moduleResolution": "node",
        "sourceMap": true,
        "noImplicitReturns": true,
        "noImplicitAny": true,
        "preserveConstEnums": true,
        "strictPropertyInitialization": false,
        "experimentalDecorators": true,
        "typeRoots": [
            "src/types"
        ],
        "emitDecoratorMetadata": true,
        "sourceRoot": "src",
        "outDir": "build"
    },
    "compileOnSave": true,
    "exclude": [
        "node_modules",
        "coverage",
        "build",
        "logs"
    ],
}

Кажется, есть проблемы только с экспортом по умолчанию. Почему они не работают должным образом? При запуске приложения с использованием node build/index.js все работает нормально, экспорт / импорт по умолчанию работает как ожидалось.

У меня возникают те же проблемы при попытке добавить модульные тесты в мое приложение React с веб-пакетом, Mocha и Jest. Я что-то пропускаю полностью?

1 Ответ

0 голосов
/ 11 января 2019

Я нашел решение сам.

Во время отладки моих тестов я обнаружил, что некоторые экспорты не вызываются. Это связано с циклическими зависимостями файлов, которые препятствовали их правильному экспорту.

После нахождения этих циклов с помощью https://github.com/pahen/madge и их разрешения запуск тестов работает нормально.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...