[英]Typescript with mocha - Cannot use import statement outside a module
[英]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 小時內學到的:
{
"type": "module"
}
{
"compilerOptions": {
"module": "esnext",
"moduleResolution": "node",
}
}
{
"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.