我改编了一个项目来使用摩卡,我遇到了一个奇怪的错误,花了我一段时间来诊断。> 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
是如何导致这个错误的。
2条答案
按热度按时间pkwftd7m1#
我也遇到过同样的问题,并找到了一个解决方案。由于node-fetch不支持v3的esm,你需要使用node-fetch-cjs来代替。你可以在这里看到细节。
ohtdti5x2#
对于面临相同问题的任何人:从v3开始的node-fetch只是ESM,很多东西都坏了。
使用一个能与摩卡咖啡和 typescript 兼容的版本。