简体   繁体   English

jest/ts/tests 找不到名字“x”

[英]jest/ts/ tests Cannot find name 'x'

I've read a ton of the previous SO questions regarding this however, none seems to solve any of my problems.我已经阅读了大量有关此问题的先前 SO 问题,但似乎没有一个能解决我的任何问题。

index.test.ts 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'...
  });
});

I have installed both jest and mocha types, just to make sure that it wasn't registering one over the other.我已经安装了 jest 和 mocha 类型,只是为了确保它没有注册另一个。 Pretty much everything is not being recognized, .babelrcc几乎所有东西都没有被识别,.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"]
}

server服务器

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`);
});

I don't know what other information is relevant if there is something else I am missing I will update this with the information我不知道还有哪些其他信息是相关的,如果还有我遗漏的东西,我会用这些信息进行更新

You are exporting the named variable server directly while you are trying to import it as if it were the default export.您在尝试将命名变量server导入时直接导出它,就好像它是默认导出一样。

Just change it to import { server } from './server';只需将其更改为import { server } from './server'; in index.test.ts and it will work as expected.index.test.ts ,它将按预期工作。 You can also change the export to export default server in server.ts but I tend to avoid that based on this article .您还可以更改导出以export default server server.ts export default server ,但我倾向于根据本文避免这种情况

Read more about export on MDN . 在 MDN 上阅读有关export更多信息

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM