如何在节点中启动超级测试文件?
我有一个 node/typescript 服务器。我希望使用 supertest 测试 api 路由。我已经编写了我的第一个测试,但无法启动它,因为
TypeError [ERR_UNKNOWN_FILE_EXTENSION]: Unknown file extension ".ts" for /Users/myname/Desktop/Code/Reapr/server/src/tests/search.test.ts
test.ts 文件是:
import request from "supertest";
import { server } from "../index";
describe("GET /user/:id", () => {
it("return user information", (done) => {
request(server)
.get("/user/123")
.set("Accept", "application/json")
.expect("Content-Type", /json/)
.expect(200, done);
});
});
package.json 是:
{
"name": "my-server",
"version": "1.0.0",
"main": "index.js",
"license": "",
"scripts": {
"build": "rimraf ./build && tsc",
"dev": "nodemon",
"lint": "eslint . --ext .js,.ts",
"start": "npm run build && node build/index.js",
"test": "node src/tests/search.test.ts"
},
"type": "module",
"dependencies": {
"bcrypt": "^5.0.1",
"body-parser": "^1.19.0",
"cloudinary": "^1.25.1",
"compression": "^1.7.4",
"cookie-parser": "^1.4.5",
"cors": "^2.8.5",
"express": "^4.17.1",
"express-rate-limit": "^5.2.6",
"jsonwebtoken": "^8.5.1",
"mongoose": "^5.12.3",
"multer": "^1.4.2",
"nodemailer": "^6.5.0",
"nodemailer-express-handlebars": "^4.0.0",
"socket.io": "^4.0.1",
"stripe": "^8.142.0"
},
"devDependencies": {
"@types/express": "^4.17.11",
"@types/jest": "^26.0.22",
"@types/mongoose": "^5.10.4",
"@types/node": "^14.14.37",
"@types/socket.io": "^2.1.13",
"@types/stripe": "^8.0.417",
"@typescript-eslint/eslint-plugin": "^4.20.0",
"@typescript-eslint/parser": "^4.20.0",
"babel-plugin-module-resolver": "^4.1.0",
"dotenv": "^8.2.0",
"eslint": "^7.23.0",
"nodemon": "^2.0.7",
"rimraf": "^3.0.2",
"supertest": "^6.1.3",
"ts-node": "^9.1.1",
"typescript": "^4.2.3"
}
}
此外,只有当我明确编写脚本
"test": node src/tests/search.test.ts"
时才会出现此错误。如果我编写
"test": "jest"
,我会收到此错误:
jest: command not found
那么,如何正确启动我的 supertests 文件(如果可能的话,一次性启动所有文件),而不是更改每个文件的脚本行?
你可以直接用
ts-node
执行
ts
文件。
"test": "ts-node src/tests/search.test.ts"
或者将其构建为
js
文件并使用
node
运行它。
要执行
jest
命令,你必须安装它,并且你正在使用 Typescript(?)那么你还需要
ts-jest
:
npm install ts-jest jest -D
为 jest 创建一个配置文件:
jest.config.js
module.exports = {
roots: ['<rootDir>/src'],
testMatch: [
'**/__tests__/**/*.+(ts|tsx|js)',
'**/?(*.)+(spec|test).+(ts|tsx|js)',
],
transform: {
'^.+\\.(ts|tsx)$': 'ts-jest',
},
};
现在,尝试执行 jest:
npx jest
在 package.json 中:
"jest": {
"preset": "ts-jest",
"testEnvironment": "node",
"setupFilesAfterEnv": [
"./src/test/setup.ts"
]
},
jest 不理解 typescript 是什么,“ts-jest”将添加 typescript 支持。
“setupFilesAfterEnv”是可选的。如果您有一个安装文件,它将运行此文件来设置额外的配置,如添加“beforeAll、beforeEach”等。
这是您需要为测试环境安装的依赖项:
"devDependencies": {
"@types/jest": "^26.0.15",
"@types/supertest": "^2.0.10",
"jest": "^26.6.1",
"supertest": "^6.0.0",
"ts-jest": "^26.4.3"
}
-
还要将此脚本添加到 package.json:
“test”:“jest --watchAll --no-cache”
--no-cache 标志与 typescript 设置相关。jest 有时无法捕获 typescript 文件中的更改。
最后,您导入了服务器,但请确保正确设置了 server.ts。这里我解释道: supertest 未找到错误测试 express 端点
这应该设置你的测试环境