使用mocha + node-fetch + typescript进行测试时出现奇怪的错误

i1icjdpr  于 2022-11-26  发布在  TypeScript
关注(0)|答案(2)|浏览(194)

我改编了一个项目来使用摩卡,我遇到了一个奇怪的错误,花了我一段时间来诊断。
> npm run test

TypeError: Unknown file extension ".ts" for C:\code\mocha-example\packages\typescript\test\index.spec.ts`
... stack ... 
at Object.exports.handler (C:\code\mocha-example\packages\typescript\node_modules\mocha\lib\cli\run.js:374:5)

我回顾了很多关于这个错误的问题,这些问题建议更改typescript编译器选项,这些都不起作用,更改"type":"module"或任何其他建议也不起作用。
所以,我从摩卡咖啡的例子中建立了一个最小的复制:
https://github.com/mochajs/mocha-examples/tree/master/packages/typescript
原来,从“node-fetch”调用“fetch”会导致此问题,如下所示:

import fetch from "node-fetch";
const foo = async () => {
    return fetch("http://www.example.com");
};
export default function (incomingText: string) {
    return `${incomingText}-static`;
}

函数foo不会被测试执行,但它仍然会导致错误。如果我没有以任何方式引用fetch,它也不会出错,即使只是一个console.log(fetch)就足够了。
下面是示例中的测试,仅供参考。

import { equal } from "assert";
import index from "./";

describe("Typescript usage suite", () => {
  it("should be able to execute a test", () => {
    equal(true, true);
  });
  it("should return expected string", () => {
    equal(index("incoming"), "incoming-static");
  });
});

我把“node-fetch”和“@types/node-fetch”都添加到本地存储库中。拥有类型并没有什么区别。我不知道仅仅引用fetch是如何导致这个错误的。

pkwftd7m

pkwftd7m1#

我也遇到过同样的问题,并找到了一个解决方案。由于node-fetch不支持v3的esm,你需要使用node-fetch-cjs来代替。你可以在这里看到细节。

ohtdti5x

ohtdti5x2#

对于面临相同问题的任何人:从v3开始的node-fetch只是ESM,很多东西都坏了。

npm i node-fetch@2

使用一个能与摩卡咖啡和 typescript 兼容的版本。

相关问题