Typescript NestJS-测试套件运行失败,找不到模块';src/article/article.entity';从';comment/comment.entity.ts';

Typescript NestJS-测试套件运行失败,找不到模块';src/article/article.entity';从';comment/comment.entity.ts';,typescript,unit-testing,testing,jestjs,nestjs,Typescript,Unit Testing,Testing,Jestjs,Nestjs,我需要nestjs和jest测试方面的帮助。我是NestJS新手,在运行测试时遇到了找不到模块的错误 我正在尝试测试我的服务,运行测试时收到错误消息: src/article/article.service.spec.ts ● 测试套件无法运行 Cannot find module 'src/article/article.entity' from 'comment/comment.entity.ts' Require stack: comment/comment.entity.ts

我需要nestjs和jest测试方面的帮助。我是NestJS新手,在运行测试时遇到了找不到模块的错误

我正在尝试测试我的服务,运行测试时收到错误消息:

src/article/article.service.spec.ts ● 测试套件无法运行

Cannot find module 'src/article/article.entity' from 'comment/comment.entity.ts'

Require stack:
  comment/comment.entity.ts
  article/article.entity.ts
  article/article.service.spec.ts

   6 |   ManyToOne,
   7 | } from 'typeorm';
>  8 | import { Article } from 'src/article/article.entity';
     | ^
   9 | 
  10 | @Entity()
  11 | export class Comment {

  at Resolver.resolveModule (../node_modules/jest-resolve/build/index.js:307:11)
  at Object.<anonymous> (comment/comment.entity.ts:8:1)
package.json中有我的jest设置

"jest": {
    "moduleFileExtensions": [
      "js",
      "json",
      "ts"
    ],
    "rootDir": "src",
    "testRegex": ".spec.ts$",
    "transform": {
      "^.+\\.(t|j)s$": "ts-jest"
    },
    "coverageDirectory": "../coverage",
    "testEnvironment": "node"
  }
我试图将rootDir更改为“/src”,但这不起作用


我用nest new blabla生成了一个项目。因此,我的jest设置是默认设置。也许我在测试中的自定义存储库模拟有问题。

不要在应用程序中使用“src/article/article.entity”之类的路径,这些路径在编译后不可用。取而代之的是相对路径,如“../../article/article.entity”(这只是一个猜测的路径)。将以下行添加到Jest配置中:

{
// ...
“笑话”:{
// ...
“moduleNameMapper”:{
“^src/(.*)$”:“/$1”
}
}
}
现在,以
src/
开头的模块将被查看到
/
,默认情况下,这是
src
文件夹(上面几行配置)。查看上面的文档链接,了解您可以使用它做的所有事情


我不知道使用绝对路径有什么问题,正如另一个回答所说,它不仅有用,而且在NestJS和Angular中都可以正常工作。

如果没有兼容的加载程序,就不能使用基本URL。nodejs加载器并不是说代码段不起作用,当像
“^src/(.*)$”:“/src/$1”
这样映射时,它必须再次指定实际的
路径!
import { Repository, EntityRepository } from 'typeorm';
import { Article } from './article.entity';
@EntityRepository(Article)
export class ArticleRepository extends Repository<Article> {
}
import { Test, TestingModule } from "@nestjs/testing";
import { getRepositoryToken } from "@nestjs/typeorm";
import { Article } from "./article.entity";
import { ArticleRepository } from "./article.repository";
import { ArticleService } from "./article.service";
import { ArticleRO } from "./dto/article.response";

describe("PostService", () => {
  let service: ArticleService;
  let articleRepository: ArticleRepository;
  beforeEach(async () => {
    const module: TestingModule = await Test.createTestingModule({
      providers: [
        ArticleService,
        {
          provide: getRepositoryToken(Article),
          useClass: ArticleRepository,
        },
      ],
    }).compile();

    service = module.get<ArticleService>(ArticleService);
    articleRepository = module.get<ArticleRepository>(
      getRepositoryToken(Article)
    );
  });

  it("should be defined", () => {
    expect(service).toBeDefined();
  });
  describe("findAll", () => {
    it("should return an array of cats", async () => {
      const result: ArticleRO[] = [];
      jest.spyOn(service, "getAllPosts").mockResolvedValueOnce(result);

      expect(await service.getAllPosts()).toBe(result);
    });
  });
});


import {
  Entity,
  Column,
  PrimaryGeneratedColumn,
  CreateDateColumn,
  ManyToOne,
} from 'typeorm';
import { Article } from 'src/article/article.entity';

@Entity()
export class Comment {
  @PrimaryGeneratedColumn()
  id: number;

  @Column()
  author: string;

  @Column()
  content: string;

  @CreateDateColumn()
  createdAt: Date;

  @ManyToOne(
    () => Article,
    article => article.comments,
  )
  article: Article;
}
"jest": {
    "moduleFileExtensions": [
      "js",
      "json",
      "ts"
    ],
    "rootDir": "src",
    "testRegex": ".spec.ts$",
    "transform": {
      "^.+\\.(t|j)s$": "ts-jest"
    },
    "coverageDirectory": "../coverage",
    "testEnvironment": "node"
  }