Tìm kiếm trang web

reactjs - Jest không theo dõi các tệp trong thư mục liên kết tượng trưng và cố gắng sử dụng thư mục chia sẻ chính


Câu hỏi là - làm thế nào để buộc Jest theo cấu trúc tệp thư mục chia sẻ liên kết tượng trưng nhưng không theo thư mục chia sẻ chính?

Tôi có cấu trúc các tập tin sau:

root
├── projects
│   ├── A
│   │   ├── node_modules
│   │   ├── shared (symlink ../../shared-main)
│   │   ├── components
│   │   ├── settings.ts
│   ├── B
│   │   ├── node_modules
│   │   ├── shared (symlink ../../shared-main)
│   │   ├── components
│   │   ├── settings.ts
├── shared-main
│   ├── utils.ts
│   ├── config.ts

Trong các dự án của tôi, A và B, tôi sử dụng các tiện ích từ thư mục chia sẻ. Utils.ts sử dụng config.ts nơi nhập các tệp cài đặt theo đường dẫn './settings.ts', nhưng bên trong thư mục shared-main, nó trông như “tệp không tồn tại” (điều này ổn). Nhưng Jest trong các bài kiểm tra của dự án khi gặp việc sử dụng một tệp chia sẻ sẽ thất bại với lỗi: "../../shared-main/config.ts:9:35 - error TS2307: Không thể tìm thấy module '../settings' hoặc khai báo kiểu tương ứng."

Làm thế nào để vượt qua điều này và buộc Jest sử dụng config.ts từ thư mục liên kết tượng trưng thay vì thư mục chính?

Câu trả lời #1

Còn về "testRegex": ["test/.*.[jt]s"], trong cấu hình jest của bạn thì sao, để nó không cố tìm các tập tin dùng chung, nếu bạn đang dùng các tập tin chung giữa nhiều dự án thì không nên có dự án nào kiểm tra những tập tin đó, họ chỉ nên kiểm tra các tập tin của riêng mình.

Tuy nhiên, tôi không chắc rằng các symlink là vấn đề của bạn; khi sử dụng TypeScript như thế này và cố gắng sử dụng các tệp bên ngoài project rootDir của bạn, nó sẽ không tìm thấy các type cho chúng hoặc sẽ báo lỗi rằng không thể tìm thấy các type nếu bạn đã thêm chúng vào include/exclude trong tsconfig. Hiện tại, tôi chỉ có thể giả sử rằng bạn đang sử dụng tsc --project với các tệp cấu hình cụ thể cho từng dự án.

// tsconfig.json

"include": ["projectA/**/*.ts"],

Nếu bạn đã làm điều gì đó như vậy thì nó sẽ không tìm thấy bất kỳ loại nào ngoài projectA, vì vậy bất cứ thứ gì trong config.ts và utils.ts sẽ không có loại nào hoặc không thể tìm thấy bất kỳ module nào, trừ khi chúng được bao gồm trong tsconfig của bạn.

Để đưa ra một ví dụ đơn giản hơn nếu tôi có:

// tsconfig.json

...
includes: ["src/**/*.ts"]
...

Cùng với một cấu trúc thư mục như thế này:

- tsconfig.json
- example.ts
- src

Then bất kỳ thứ gì trong example.ts sẽ không thể tìm thấy loại hoặc các import module của nó.

Cách tôi giải quyết vấn đề này trong dự án của mình là sử dụng ts-jest cùng với việc chỉ định nơi để tìm các bài kiểm tra, cùng với việc ghi đè rootDir trong globals.

// .jestrc.json

"testRegex": ["test/.*.[jt]s"],

...

"globals": {
  "ts-jest": {
    "tsconfig": {
      "rootDir": "."
    }
  }
}