Mocha + TypeScript: невозможно использовать оператор импорта вне модуля - PullRequest
0 голосов
/ 02 апреля 2020

Я смотрел это видео , чтобы узнать, как добавить несколько простых тестов к моим Express маршрутам, но я получаю всевозможные ошибки при выполнении теста. Ошибка:

импорт * как chai из 'chai';

^^^^^^

SyntaxError: Невозможно использовать оператор импорта вне модуля

Я прочитал несколько похожих вопросов о переполнении стека и проблемах GitHub, но я не нашел решения для своего собственного приложения. Наконец, я нашел документацию Mocha на GitHub относительно модулей ES, но она не работала:

Я создал приложение, используя для переноса модуль TypeScript и общий JS, поэтому добавил "test": "env TS_NODE_COMPILER_OPTIONS='{\"module\": \"commonjs\" }' mocha src/test/*.ts" к сценариям package.json, но я получаю одну и ту же ошибку каждый раз. Я использую ts-node в качестве сервера.

В любом случае, это мой tsconfig.json файл:

{
    "compilerOptions": {
        "sourceMap": true,
        "target": "es6",
        "module": "commonjs",
        "outDir": "./dist",
        "rootDir": "./src"
    },
    "exclude": [
        "node_modules"
    ]
}

А это src/test/mi-route.ts файл:

import * as chai from 'chai';
import * as chaiHttp from 'chai-http';
import server from '../app';

// Assertions
chai.should();

chai.use(chaiHttp);

describe('API Users', () => {
    // Test Route GET
    describe('GET /api/admin/users', () => {
        it('Should return all the users', done => {
            chai.request(server)
                .get('/api/admin/users')
                .end((err, response) => {
                    response.should.have.status(200);
                    response.body.should.be.a('object');
                    done();
                });
        });
    });
});

А это мои package.json скрипты:

"scripts": {
    "dev": "ts-node-dev src/app.ts",
    "start": "node dist/app.js",
    "test": "env TS_NODE_COMPILER_OPTIONS='{\"module\": \"commonjs\" }' mocha src/test/*.ts",
    "build": "tsc -p"
  },

Итак ... есть предложения? Стоит ли менять модуль Common JS? Заранее спасибо

Ответы [ 2 ]

2 голосов
/ 02 апреля 2020

Я смог протестировать благодаря @ types / chai-http - не могу использовать импорт ES6 Ответ на вопрос GitHub.

Я добавил второй файл конфигурации TypeScript tscconfig.testing.json со следующей информацией:

{
    "compilerOptions": {
      "module": "commonjs",
      "target": "es2015",
      "lib": ["es2017"],
      "declaration": false,
      "noImplicitAny": false,
      "removeComments": true,
      "inlineSourceMap": true,
      "moduleResolution": "node"
    },
    "include": ["scripts/**/*.ts", "src/**/*.ts", "node_modules/lodash-es/**/*.js"]
  }

Затем я изменил свои package.json сценарии как:

"test": "env TS_NODE_PROJECT=\"tsconfig.testing.json\" mocha --require ts-node/register 'src/test/**/*.ts'",

Наконец, я изменил файл теста следующим образом:

import * as chai from 'chai';
import 'chai-http';
import server from '../app';

// Assertions
chai.should();

chai.use(require('chai-http'));

Что ж, запуск тестов работает сейчас.

0 голосов
/ 06 мая 2020

У меня была та же проблема, и я почти отказался от использования Mocha с TypeScript (в нашем случае Angular 9).

Вот что мне помогло:

В tsconfig. json:

Заменено это:

"module": "esnext", 

на это:

"module": "commonjs",

Также здесь я нашел рабочий пример Mocha с TypeScript и использовал оттуда файл tsconfig для сравнения с моей: https://medium.com/@RupaniChirag / запись юнит-тестов в машинописи-d4719b8a0a40

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