【发布时间】:2020-10-15 09:28:08
【问题描述】:
我需要对一堆不同的文件运行类似的测试,而我使用一个测试套件文件。
示例:
for (const configName in defaults) {
const config = defaults[configName];
const onMobile = testMobile.includes(configName);
const onDesktop = testDesktop.includes(configName);
describe(`${configName}`, () => {
const tests = (isDesktop:boolean) => {
let defaultConfig: AttnConfig<MultiPageCreativeConfig>;
function freshRender() {
cleanup();
return render(
<TestWrapper isDesktop={isDesktop} layout={defaultConfig.creativeConfig.base.fields.layout.layout}>
<ConfigCtx.Provider value={defaultConfig}>
<App />
</ConfigCtx.Provider>
</TestWrapper>,
{
container: document.documentElement
}
);
}
beforeEach(() => {
jest.clearAllMocks();
mockedUseWaitForPageLoad.mockReturnValue(false);
mockedUseResponsiveLayout.mockReturnValue([isDesktop]);
defaultConfig = attnTestConfigWrapper(config);
});
afterEach(cleanup);
for (let page = 0; page < config.pages.length ;page++) {
describe(`Page ${page + 1}`, () => {
beforeEach(() => {
defaultConfig.overrides.currentPageIndex = page;
freshRender();
});
itPassesVisualRegressionTests(!isDesktop);
});
}
}
if (onMobile) tests(false);
if (onDesktop) tests(true);
})
}
然而,这种方式并没有利用多线程。由于我只会单独运行这些测试,因此与为每个配置编写单独的测试文件相比,花费的时间要长得多(大约长两到三倍)。
尽管我想在单个文件中编写测试,但如果我需要重构某些东西(我已经不得不多次更改这些文件),这会导致很多额外的工作。
有没有办法为 jest 生成测试套件以并行运行或至少将测试逻辑分解为共享实用程序函数?
【问题讨论】:
-
你签出并发方法了吗?你可以做
it.concurrent(...),我假设它是你在itPassesVisualRegressionTests上所拥有的 -
@Dus 很奇怪,我找不到关于该选项的任何文档:/ 但是可以解决我的性能问题。
标签: javascript node.js typescript testing jestjs