I just simple create project using below commands: npm i -g @nestjs/cli
nest new project-name npm install --save-dev mocha chai @types/mocha @types/chai
package.json:
{
"name": "project-name",
"version": "0.0.1",
"description": "",
"author": "",
"private": true,
"license": "UNLICENSED",
"scripts": {
"test": "mocha -r ts-node/register 'test/**/*.ts'",
"start": "nest start",
"start:dev": "nest start --watch",
"start:debug": "nest start --debug --watch",
"start:prod": "node dist/main",
"lint": "eslint \"{src,apps,libs,test}/**/*.ts\" --fix",
"format": "prettier --write \"src/**/*.ts\""
},
"dependencies": {
"@nestjs/common": "^10.0.0",
"@nestjs/core": "^10.0.0",
"@nestjs/platform-express": "^10.0.0",
"reflect-metadata": "^0.2.0",
"rxjs": "^7.8.1"
},
"devDependencies": {
"@nestjs/cli": "^10.0.0",
"@nestjs/schematics": "^10.0.0",
"@tsconfig/node19": "^19.1.2",
"@types/chai": "^4.3.12",
"@types/express": "^4.17.17",
"@types/mocha": "^10.0.6",
"@types/node": "^20.3.1",
"@types/supertest": "^6.0.0",
"@typescript-eslint/eslint-plugin": "^6.0.0",
"@typescript-eslint/parser": "^6.0.0",
"chai": "^5.1.0",
"cross-env": "^7.0.3",
"eslint": "^8.42.0",
"eslint-config-prettier": "^9.0.0",
"eslint-plugin-prettier": "^5.0.0",
"mocha": "^10.3.0",
"nyc": "^15.1.0",
"prettier": "^3.0.0",
"source-map-support": "^0.5.21",
"supertest": "^6.3.3",
"ts-loader": "^9.4.3",
"ts-node": "^10.9.2",
"tsconfig-paths": "^4.2.0",
"typescript": "^5.1.3"
},
"jest": {
"moduleFileExtensions": [
"js",
"json",
"ts"
],
"rootDir": "src",
"testRegex": ".*\\.spec\\.ts$",
"transform": {
"^.+\\.(t|j)s$": "ts-jest"
},
"collectCoverageFrom": [
"**/*.(t|j)s"
],
"coverageDirectory": "../coverage",
"testEnvironment": "node"
}
}
tsconfig.json:
{
"compilerOptions": {
"module": "commonjs",
"declaration": true,
"removeComments": true,
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"allowSyntheticDefaultImports": true,
"target": "ES2021",
"sourceMap": true,
"outDir": "./dist",
"baseUrl": "./",
"incremental": true,
"skipLibCheck": true,
"strictNullChecks": false,
"noImplicitAny": false,
"strictBindCallApply": false,
"forceConsistentCasingInFileNames": false,
"noFallthroughCasesInSwitch": false
}
}
.mocharc.json
{
"extension": [
"ts"
],
"spec": "test/**/*.ts",
"require": [
"ts-node/register",
"source-map-support/register"
],
"recursive": true
}
// src/calculator.service.ts
export class CalculatorService {
add(a: number, b: number): number {
return a + b;
}
}
// test/calculator.service.spec.ts
import { expect } from 'chai';
import { CalculatorService } from '../src/calculator.service';
describe('CalculatorService', () => {
let calculatorService: CalculatorService;
beforeEach(() => {
calculatorService = new CalculatorService();
});
describe('add', () => {
it('should return the sum of two numbers', () => {
const result = calculatorService.add(2, 3);
expect(result).to.equal(5);
});
});
// Add more tests here for other methods of CalculatorService
});
when i run npm test
[email protected] test cross-env TS_NODE_COMPILER_OPTIONS='{"module": "commonjs" }' mocha -r ts-node/register 'test/**/*.ts'
TypeError [ERR_UNKNOWN_FILE_EXTENSION]: Unknown file extension ".ts" for /var/www/html/project-name/test/calculator.service.spec.ts at new NodeError (node:internal/errors:399:5) at Object.getFileProtocolModuleFormat [as file:] (node:internal/modules/esm/get_format:99:9) at defaultGetFormat (node:internal/modules/esm/get_format:139:38) at ESMLoader.defaultLoad (node:internal/modules/esm/load:83:20) at ESMLoader.load (node:internal/modules/esm/loader:342:43) at ESMLoader.moduleProvider (node:internal/modules/esm/loader:207:22) at new ModuleJob (node:internal/modules/esm/module_job:63:26) at ESMLoader.#createModuleJob (node:internal/modules/esm/loader:231:17) at ESMLoader.getModuleJob (node:internal/modules/esm/loader:184:34)