簡體   English   中英

Mocha + TypeScript:不能在模塊外使用導入語句

[英]Mocha + TypeScript: Cannot use import statement outside a module

我正在觀看此視頻,以了解如何在我的 Express 路由中添加一些簡單的測試,但是在執行測試時我遇到了各種錯誤。 錯誤是:

從'chai'導入*作為chai;

^^^^^^

SyntaxError: 不能在模塊外使用 import 語句

我已經閱讀了一些類似的 Stack Overflow 問題和 GitHub 問題,但我沒有為我自己的應用程序找到解決方案。 最后,我在 GitHub 上找到了有關 ES 模塊的Mocha 文檔,但沒有成功:

我使用 TypeScript 和 CommonJS 模塊創建了應用程序進行轉譯,所以我在包中添加了"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 模塊嗎? 提前致謝

有同樣的問題,幾乎放棄使用 Mocha 和 TypeScript(在我們的例子中是 Angular 9)。

這對我有幫助:

tsconfig.json

替換了這個:

"module": "esnext", 

有了這個:

"module": "commonjs",

同樣在這里,我找到了一個帶有 TypeScript 的 Mocha 工作示例,並使用那里的tsconfig文件與我的進行比較: https : tsconfig

感謝@types/chai-http – 無法使用 ES6 導入GitHub 問題的答案,我能夠進行測試。

我添加了第二個 TypeScript 配置文件tsconfig.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'));

好吧,運行測試現在可以工作了。

也有這個問題,發現不用切換到commonJS,只需要開啟ESM:

npm install --save-dev esm

./node_modules/mocha/bin/mocha -r esm -r ts-node/register "src/**/*Test.ts"

確保您的項目中有.mocharc.json

{
  "extension": ["ts"],
  "timeout": 5000,
  "exit": true,
  "require": "ts-node/register"
}

(另見https://github.com/mochajs/mocha-examples/tree/master/packages/typescript#es-modules

從我在過去 2 小時內學到的:

包.json

{
    "type": "module"
}

配置文件

{
    "compilerOptions": {
        "module": "esnext",
        "moduleResolution": "node",
    }
}

.mocharc.json

{
    "node-option": [
        "experimental-specifier-resolution=node",
        "loader=ts-node/esm"
    ]
}

也遇到這個問題,是因為我安裝的 mocha 版本只需要 mocharc.json。 不支持任何其他格式,我的 mocha 配置文件是 .mocharc 沒有結束 withs .json

我最近在我正在從事的項目中遇到了幾次這個問題。

該項目包含許多較小的模塊,這些模塊都是用 TypeScript 編寫的,並在提交之前進行編譯。 我已經(顯然至少有幾次,因為這個鏈接已經是紫色的)不知何故設法在沒有編譯的情況下提交了我的模塊。 當 mocha 嘗試執行未提交給版本控制的依賴項的.js版本時,這會導致錯誤。

構建依賴項、提交和更新包解決了我的問題。 希望這可以幫助其他與我處於類似位置的人!

此錯誤的另一個可能原因:

你的文件類型是.tsx而不是.ts 將其更改為.ts將修復錯誤或添加對.tsx文件的適當支持。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM