Typescript 从另一个Github repo忽略未转换的包时transformIgnorePatterns不工作
我目前遇到了一个问题,一个jest测试正在中断,因为我正在我在package.json中创建的另一个repo中导入一个包,它中断了导入该包的测试 在freddies_testing_Playerd的package.json中,我链接了greeter,这是我创建的另一个回购协议,如下所示:Typescript 从另一个Github repo忽略未转换的包时transformIgnorePatterns不工作,typescript,github,jestjs,babeljs,package.json,Typescript,Github,Jestjs,Babeljs,Package.json,我目前遇到了一个问题,一个jest测试正在中断,因为我正在我在package.json中创建的另一个repo中导入一个包,它中断了导入该包的测试 在freddies_testing_Playerd的package.json中,我链接了greeter,这是我创建的另一个回购协议,如下所示: "greeter": "git@github.com:Freddie-Pike/greeter.git#semver:0.0.1" “Greeter”是我设置的一个re
"greeter": "git@github.com:Freddie-Pike/greeter.git#semver:0.0.1"
“Greeter”是我设置的一个repo,它使用TypeScript文档中的Greeter示例来显示在package.json中导入Github repo的示例。以下是迎宾类在迎宾回购协议中的内容:
// From the TypeScript docs: https://www.typescriptlang.org/docs/handbook/classes.html
class Greeter {
greeting: string;
constructor(message: string) {
this.greeting = message;
}
greet() {
return "Hello, " + this.greeting;
}
}
export default Greeter;
不幸的是,在弗雷迪的操场上,一个玩笑测试因为迎宾回购而中断。名为GreeterUI的react组件(我想先强调一下,react组件没有损坏,因为我已经在实际浏览器中测试了该组件)导入greeter类,如下所示:
import React from "react";
import PropTypes from "prop-types";
import Greeter from "greeter";
function GreeterUI({ person }) {
const greeter = new Greeter(person);
return <div>{greeter.greet()}</div>;
}
GreeterUI.propTypes = {
person: PropTypes.string,
};
export default GreeterUI;
这仍然会返回相同的错误,尽管下面是jest文档中的代码片段,其中说:
有时(特别是在React Native或TypeScript项目中)第三方模块以未翻译的形式发布。由于默认情况下不会转换节点_模块中的所有文件,Jest将无法理解这些模块中的代码,从而导致语法错误。为了克服这个问题,您可以使用transformIgnorePatterns来允许传输这样的模块。您将在React Native Guide中找到此用例的一个很好的示例
我在这个问题上做了一些研究,发现这是一个常见的错误,我尝试应用了几种我发现的解决方案,但没有成功。因此,在这个问题上的任何帮助都将不胜感激
链接:
- ->使用greeter软件包的回购协议,位于js/components/GreeterUI/tests/GreeterUI.test.jsx中
- ->导致测试失败的回购协议
- TypeScript文档中的迎宾员示例:
import React from "react";
import { render, screen } from "@testing-library/react";
import GreeterUI from "../GreeterUI";
describe("GreeterUI", () => {
it("renders greeting text.", () => {
render(<GreeterUI person={"Fred"} />);
const greeting = screen.queryByText(/hello, fred/i);
expect(greeting).toBeInTheDocument();
});
});
FAIL js/components/GreeterUI/__tests__/GreeterUI.test.jsx
● Test suite failed to run
Jest encountered an unexpected token
This usually means that you are trying to import a file which Jest cannot parse, e.g. it's not plain JavaScript.
By default, if Jest sees a Babel config, it will use that to transform your files, ignoring "node_modules".
Here's what you can do:
• To have some of your "node_modules" files transformed, you can specify a custom "transformIgnorePatterns" in your config.
• If you need a custom transformation specify a "transform" option in your config.
• If you simply want to mock your non-JS modules (e.g. binary assets) you can stub them out with the "moduleNameMapper" config option.
You'll find more details and examples of these config options in the docs:
https://jestjs.io/docs/en/configuration.html
Details:
/Users/freddiepike/github_action_jest/node_modules/greeter/dist/index.js:1
({"Object.<anonymous>":function(module,exports,require,__dirname,__filename,global,jest){export { default } from "./Greeter";
^^^^^^
SyntaxError: Unexpected token 'export'
1 | import React from "react";
2 | import PropTypes from "prop-types";
> 3 | import Greeter from "greeter";
| ^
4 |
5 | function GreeterUI({ person }) {
6 | const greeter = new Greeter(person);
at Runtime.createScriptFromCode (node_modules/jest-runtime/build/index.js:1266:14)
at Object.<anonymous> (js/components/GreeterUI/GreeterUI.jsx:3:1)
Test Suites: 1 failed, 2 passed, 3 total
Tests: 2 passed, 2 total
Snapshots: 0 total
Time: 9.077 s
Ran all test suites.
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! github_action_jest@1.0.0 test: `jest --runInBand`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the github_action_jest@1.0.0 test script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
npm ERR! A complete log of this run can be found in:
npm ERR! /Users/freddiepike/.npm/_logs/2020-11-16T22_05_57_035Z-debug.log
transformIgnorePatterns: ["<rootDir>/node_modules/(?!${greeter})"],