【发布时间】:2022-08-18 15:44:50
【问题描述】:
当我在包含错误的 repo 中运行 jest 测试时,堆栈跟踪指向错误的行号。这使得调试非常困难。例如:
预期错误
● SimpleComponent › renders
ReferenceError: retur is not defined
4 | export const Simple = () => {
5 | const [count, setCount] = useState(0);
> 6 | retur (
| ^
7 | <div>
8 | <p>You clicked {count} times</p>
9 | <button onClick={() => setCount(count + 1)}>Click me</button>
at Simple (src/SimpleComponent.jsx:6:3)
at Object.<anonymous> (tst/SimpleComponentTest.jsx:8:5)
收到错误
请注意,它指向错误的行号 - 34 而不是 6。
● SimpleComponent › renders
ReferenceError: retur is not defined
at Simple (src/SimpleComponent.jsx:34:3)
at Object.<anonymous> (tst/SimpleComponentTest.jsx:14:23)
我的发现
我发现如果我注释掉jest.config.js 中的moduleDirectories 条目,那么我会收到预期的错误消息。我不明白为什么moduleDirectories 会产生如此大的影响。
但是,我想保留我的moduleDirectories。
问题
为什么开玩笑测试的堆栈跟踪指向错误的行号?我该如何解决?
文件
我在https://github.com/bluprince13/jest-wrong-line-numbers-in-stack-trace 上传了一个最小的例子
资源
请注意,return 语句拼写错误。
// src/SimpleComponent.jsx
import React, {useState} from \"react\"
export const Simple = () => {
const [count, setCount] = useState(0);
retur (
<div>
<p>You clicked {count} times</p>
<button onClick={() => setCount(count + 1)}>Click me</button>
</div>
);
};
测试
// tst/SimpleComponentTest.jsx
import { Simple } from \"../src/SimpleComponent\";
import { render } from \"@testing-library/react\";
import React from \"react\";
describe(\"SimpleComponent\", () => {
it(\"renders\", () => {
render(<Simple />);
});
});
.babelrc
{
\"presets\": [
\"@babel/preset-react\",
[
\"@babel/preset-env\"
]
]
}
jest.config.js
module.exports = {
moduleDirectories: [
\"<rootDir>/src\",
\"<rootDir>/tst\",
\"<rootDir>/node_modules\"
],
testMatch: [\"**/tst/**/(*)Test.js?(x)\", \"**/?(*.)(spec|test).js?(x)\"],
transform: {
\"^.+\\\\.jsx?$\": \"babel-jest\"
}
};
包.json
{
\"scripts\": {
\"test\": \"jest --runInBand\"
},
\"dependencies\": {
\"react\": \"^16.14.0\",
\"react-dom\": \"^16.14.0\",
\"snapshot-diff\": \"^0.6.2\"
},
\"devDependencies\": {
\"babel-jest\": \"^25.2.4\",
\"@babel/preset-env\": \"7.x\",
\"@babel/preset-react\": \"7.x\",
\"@testing-library/react\": \"^9.2.0\",
\"jest\": \"^26.6.3\"
}
}
-
您是否尝试过颠倒 moduleDirectories 中的顺序
-
它指向错误的线,在某种程度上与源地图有关。对我来说,如果我删除
<rootDir>字符串令牌,它似乎有效 -
\"<rootDir>/node_modules\",=>\"node_modules\",
标签: javascript reactjs jestjs babeljs babel-jest