jest/ts/ tests 找不到名称 'x'
jest/ts/ tests Cannot find name 'x'
我已经阅读了大量关于此的先前 SO 问题,但是,none 似乎解决了我的任何问题。
index.test.ts
import request from 'supertest';
import * as server from '../server';
import 'jest'
//close server after each request
afterEach( //cannot find name 'afterEach'
async (): Promise<void> => {
await server.close(); // Property 'close' does not exist on type 'typeof import(<path to file)'
},
);
describe('get /', (): void => { //Cannot find name 'describe'. Do you need to install type definitions for a test runner? Try `npm i @types/jest` or `npm i @types/mocha`
it('should respond as expected', async (): Promise<void> => {// cannot find 'it'...
const response = await request(server).get('/');
expect(response.status).toEqual(200); // cannot find 'expect'
expect(response.body.data).toEqual('Sending some JSON'); // cannot find 'expect'...
});
});
我已经安装了 jest 和 mocha 类型,只是为了确保它没有注册一个。几乎所有的东西都没有被识别,
.babelrcc
{
"presets": ["@babel/preset-typescript"]
}
jest.config.js
module.exports = {
preset: 'ts-jest',
testEnvironment: 'node',
transform: {
'^.+\.tsx?$': 'ts-jest',
},
};
tsconfig.json
{
"compilerOptions": {
"module": "commonjs",
"target": "es6",
"noImplicitAny": true,
"preserveConstEnums": true,
"outDir": "./dist",
"sourceMap": true,
"esModuleInterop": true
},
"include": ["./src/**/*"],
"exclude": ["test", "**/*/spec.ts", "**/*/test.ts"]
}
服务器
import * as dotenv from 'dotenv';
dotenv.config();
import Koa from 'koa';
import logger from 'koa-logger';
import apiRoutes from './Routes';
import cors from '@koa/cors';
import bodyParser from 'koa-bodyparser';
const app = new Koa();
const PORT = process.env.PORT || 3001;
const ENV = process.env.NODE_ENV || 'Development';
app.use(logger());
app.use(cors());
app.use(bodyParser());
app.use(apiRoutes);
export const server = app.listen(PORT, (): void => {
console.log(` Server listening on port ${PORT} - ${ENV} environment`);
});
我不知道还有什么其他信息是相关的,如果我还遗漏了其他信息,我会用这些信息进行更新
您在尝试导入命名变量 server
时直接导出它,就像它是默认导出一样。
只需在 index.test.ts
中将其更改为 import { server } from './server';
,它将按预期工作。您也可以在 server.ts
中将导出更改为 export default server
,但我倾向于根据 this article.
避免这种情况
阅读更多 about export
on MDN。
我已经阅读了大量关于此的先前 SO 问题,但是,none 似乎解决了我的任何问题。
index.test.ts
import request from 'supertest';
import * as server from '../server';
import 'jest'
//close server after each request
afterEach( //cannot find name 'afterEach'
async (): Promise<void> => {
await server.close(); // Property 'close' does not exist on type 'typeof import(<path to file)'
},
);
describe('get /', (): void => { //Cannot find name 'describe'. Do you need to install type definitions for a test runner? Try `npm i @types/jest` or `npm i @types/mocha`
it('should respond as expected', async (): Promise<void> => {// cannot find 'it'...
const response = await request(server).get('/');
expect(response.status).toEqual(200); // cannot find 'expect'
expect(response.body.data).toEqual('Sending some JSON'); // cannot find 'expect'...
});
});
我已经安装了 jest 和 mocha 类型,只是为了确保它没有注册一个。几乎所有的东西都没有被识别, .babelrcc
{
"presets": ["@babel/preset-typescript"]
}
jest.config.js
module.exports = {
preset: 'ts-jest',
testEnvironment: 'node',
transform: {
'^.+\.tsx?$': 'ts-jest',
},
};
tsconfig.json
{
"compilerOptions": {
"module": "commonjs",
"target": "es6",
"noImplicitAny": true,
"preserveConstEnums": true,
"outDir": "./dist",
"sourceMap": true,
"esModuleInterop": true
},
"include": ["./src/**/*"],
"exclude": ["test", "**/*/spec.ts", "**/*/test.ts"]
}
服务器
import * as dotenv from 'dotenv';
dotenv.config();
import Koa from 'koa';
import logger from 'koa-logger';
import apiRoutes from './Routes';
import cors from '@koa/cors';
import bodyParser from 'koa-bodyparser';
const app = new Koa();
const PORT = process.env.PORT || 3001;
const ENV = process.env.NODE_ENV || 'Development';
app.use(logger());
app.use(cors());
app.use(bodyParser());
app.use(apiRoutes);
export const server = app.listen(PORT, (): void => {
console.log(` Server listening on port ${PORT} - ${ENV} environment`);
});
我不知道还有什么其他信息是相关的,如果我还遗漏了其他信息,我会用这些信息进行更新
您在尝试导入命名变量 server
时直接导出它,就像它是默认导出一样。
只需在 index.test.ts
中将其更改为 import { server } from './server';
,它将按预期工作。您也可以在 server.ts
中将导出更改为 export default server
,但我倾向于根据 this article.
阅读更多 about export
on MDN。