可以将测试文件放在Next.js的Pages目录下吗?

7cwmlq89  于 2022-10-01  发布在  其他
关注(0)|答案(1)|浏览(182)

我正在为Next.js应用程序中的API路由编写集成测试,我想知道将index.test.ts文件放在/pages目录下是否有任何问题。我希望测试尽可能接近文件,而不是必须将项目结构Map到__test__目录中。

./pages/api/path/index.ts

handler.get(async (req: NextApiRequest, res: NextApiResponse) => {
  ...
});

export default  handler;

./pages/api/path/index.test.ts

import { testClient } from "__test__/utils/testClient";

describe("Testing API  POST: /api", () => {
  test("Should return 401 when not authenticated", async () => {
    const request = testClient({ handler });
    const res = await request.post("/api/applications");
    expect(res.status).toEqual(401);
  });
});
rggaifut

rggaifut1#

**TL;DR:**虽然默认情况下不可能,但您可以通过在next.config.js中自定义pageExtensions选项来将测试文件放在pages文件夹中。

默认情况下,Next.js将考虑pages文件夹下以tsxtsjsxjs结尾的任何文件,以构建页面/API路由和路由。

来自自定义页面扩展文档:
Next.js假定pages目录中的每个tsx/ts/jsx/js文件都是一个页面或API路由,并且可能会暴露易受拒绝服务攻击的意外路由,或者在构建生产捆绑包时抛出如下错误

pages文件夹(或任何子文件夹)中添加名为index.test.ts的文件将包括该文件作为实际页面,并可能在构建时引发错误。

您可以使用next.config.js中的pageExtensions属性修改Next.js预期的扩展名来绕过此问题。

module.exports = {
    // Default value is ['tsx', 'ts', 'jsx', 'js']
    pageExtensions: ['page.tsx', 'page.ts', 'page.jsx', 'page.js']
}

使用此配置时,将只考虑具有上述扩展名的页面。因此,您可以拥有以下pages文件夹结构,以及位于同一位置的测试文件。

pages/
├─ api/
│   ├─ path.page.ts
│   └─ path.test.ts
├─ _app.page.ts
├─ _document.page.ts
├─ index.page.ts
└─ index.test.ts

path.test.tsindex.test.ts都将被忽略。

相关问题