我正在尝试学习typescript,并创建了一个简单的typescript node js服务器,它有两个端点。尝试两个单元测试文件,并得到以下错误:
TSError: ⨯ Unable to compile TypeScript:
test/endpoint2.test.ts:6:7 - error TS2451: Cannot redeclare block-scoped variable 'chai_1'.
6 const chai_1 = __importDefault(require("chai"));
~~~~~~
test/endpoint.test.ts:6:7
6 const chai_1 = __importDefault(require("chai"));
~~~~~~
'chai_1' was also declared here.
测试文件1(endpoint.test.ts):
import chai from 'chai';
import chaiHttp from 'chai-http';
import { app } from '../src/index';
chai.use(chaiHttp);
describe('Endpoint tests', () => {
it('Ping endpoint should return status 200', (done) => {
const msg = "hello";
chai.request(app)
.get('/ping')
.query({
"message": msg
})
.end((err, res) => {
chai.expect(res).to.have.status(200);
chai.expect(res.body).to.have.property("env", "TEST")
chai.expect(res.body).to.have.property("version", "1.0.0")
done();
});
});
});
测试文件2(endpoint2.test.ts):
import chai from 'chai';
import chaiHttp from 'chai-http';
import { app } from '../src/index';
chai.use(chaiHttp);
describe('Endpoint2', () => {
it('Hello world endpoint should return status 200', (done) => {
const msg = "hello";
chai.request(app)
.get('/')
.end((err, res) => {
chai.expect(res).to.have.status(200);
done();
});
});
});
package.json:
{
"name": "sample_ts_server",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"start": "nodemon --watch 'src/**/*.ts' --exec NODE_ENV=DEV 'ts-node' src/index.ts",
"test": "ts-node ./node_modules/mocha/bin/mocha --exit --require ts-node/register test/**/*.test.ts"
},
"author": "",
"license": "ISC",
"devDependencies": {
"@types/cors": "^2.8.13",
"@types/express": "^4.17.17",
"@types/mocha": "^10.0.1",
"chai": "^4.3.7",
"chai-http": "^4.3.0",
"mocha": "^10.2.0",
"nodemon": "^2.0.22",
"ts-node": "^10.9.1",
"typescript": "^5.0.2"
},
"dependencies": {
"cors": "^2.8.5",
"express": "^4.18.2"
}
}
tsconfig.json:
{
"compilerOptions": {
"target": "es6",
"module": "commonjs",
"esModuleInterop": true,
"outDir": "./dist",
"sourceMap": true,
"moduleDetection": "auto",
"noEmit": true
},
"include": [
"./src/**/*"
]
}
通过package.json脚本运行测试
"scripts": {
"test": "ts-node ./node_modules/mocha/bin/mocha --exit --require ts-node/register test/**/*.test.ts"
},
如何告诉typescript编译器不要在不同文件中的导入上出错?
尝试:
1.在test/libs中创建了一个库文件,保存所有导入,然后将其导出到测试文件中。同样的错误。
1.尝试翻转不同的tsconfig标志,但未成功
1.尝试将'import'替换为'require'。这可以工作,但IDE警告我不要这样做。我想我应该可以使用import。
1.我所有的谷歌提示都把我带到了一个非常不同的方向。
1条答案
按热度按时间wnavrhmk1#
我在使用CodeceptJS和Typescript时遇到了类似的问题。我有一个自定义脚本,它创建Codecept配置并运行测试(而不是直接使用
npx codeceptjs
运行)。我能够将此范围缩小到Codecept(重新)注册ts-node(请参阅https://github.com/codeceptjs/CodeceptJS/blob/3.x/lib/config.js#L152)。你可以做的是检查你的依赖是否也在做同样的事情。如果你设法找到了罪魁祸首,看看是否有任何配置选项允许你禁用这个行为。
在2017年,ts-node的Github上有一个issue,其中包含了一些关于这个问题的额外讨论。它还包含了另一种可能的解决方法,即覆盖register函数,尽管我不能说这有多安全(可能不理想)