我希望将我的笑话快照创建为我的测试文件的兄弟
我目前将我的快照放在默认__snapshots__文件夹中。
当前的:
我想达到的目标:
我在 github 上找到了这篇文章:https : //github.com/facebook/jest/issues/1650
在线程中,有人说以下应该有效,但我没有任何运气(即使更改了正则表达式和其他更改):
module.exports = {
testPathForConsistencyCheck: 'some/example.test.js',
resolveSnapshotPath: (testPath, snapshotExtension) =>
testPath.replace(/\.test\.([tj]sx?)/, `${snapshotExtension}.$1`),
resolveTestPath: (snapshotFilePath, snapshotExtension) =>
snapshotFilePath.replace(snapshotExtension, '.test'),
}
Run Code Online (Sandbox Code Playgroud)
在package.json(或如果您使用jest.config.js)中,您需要添加snapshotResolver文件的路径:
"jest": {
"snapshotResolver": "./snapshotResolver.js"
}
Run Code Online (Sandbox Code Playgroud)
snapshotResolver.js 是一个包含您在 Github 问题中找到的代码的文件。
在我的情况下,此文件位于项目的根目录(靠近node_modules文件夹)
这些解决方案更加复杂,是您想要做的事情所需要的。
正如https://github.com/facebook/jest/issues/1650中指出的
创建一个文件:我使用 - 'jest/snapshotResolver.js'
module.exports = {
resolveSnapshotPath: (testPath, snapshotExtension) =>
testPath + snapshotExtension,
resolveTestPath: (snapshotFilePath, snapshotExtension) =>
snapshotFilePath.replace(snapshotExtension, ''),
testPathForConsistencyCheck: 'some.test.js',
};
Run Code Online (Sandbox Code Playgroud)
在你的笑话配置中将该文件设置为解析器
snapshotResolver: './jest/snapshotResolve.js',
Run Code Online (Sandbox Code Playgroud)
或者如果你的笑话配置在 package.json 中:
"snapshotResolver": "./jest/snapshotResolve.js",
Run Code Online (Sandbox Code Playgroud)
简而言之,这两个函数相互镜像,一个获取测试文件路径并返回快照路径,另一个获取快照路径并返回测试文件路径。第三个是用于验证的文件路径示例。
要记住的一件事是路径是完整路径而不是相对路径。
/**
*
* @param testPath Path of the test file being test3ed
* @param snapshotExtension The extension for snapshots (.snap usually)
*/
const resolveSnapshotPath = (testPath, snapshotExtension) => {
const snapshotFilePath = testPath + snapshotExtension; //(i.e. some.test.js + '.snap')
return snapshotFilePath;
}
/**
*
* @param snapshotFilePath The filename of the snapshot (i.e. some.test.js.snap)
* @param snapshotExtension The extension for snapshots (.snap)
*/
const resolveTestPath = (snapshotFilePath, snapshotExtension) => {
const testPath = snapshotFilePath.replace(snapshotExtension, '').replace('__snapshots__/', ''); //Remove the .snap
return testPath;
}
/* Used to validate resolveTestPath(resolveSnapshotPath( {this} )) */
const testPathForConsistencyCheck = 'some.test.js';
module.exports = {
resolveSnapshotPath, resolveTestPath, testPathForConsistencyCheck
};
Run Code Online (Sandbox Code Playgroud)