如何使用 get_new_b: 52
using function: 52
new_b: 55
using subroutine: 55
或jest.run()
以编程方式运行所有测试?我想作为一个论点提供什么?
我试图查找有关它们的文档但失败了。
如果上述功能不起作用,如果我想以编程方式运行jest,我应该调用什么?
答案 0 :(得分:4)
Jest不应该以编程方式运行。也许它将来会发生。
尝试运行以下内容:
const jest = require("jest");
const options = {
projects: [__dirname],
silent: true,
};
jest
.runCLI(options, options.projects)
.then((success) => {
console.log(success);
})
.catch((failure) => {
console.error(failure);
});
作为success
回调中的then
,将传递一个对象,其中包含globalConfig
和results
个键。看看他们,也许它会帮助你。
答案 1 :(得分:1)
根据我到目前为止的经验,利用run()
要求您定义一个静态配置,然后像通常使用Jest CLI一样将参数传递给Jest。
使用runCLI()
可以动态创建配置并将其提供给Jest。
我选择前者只是因为我只想为全局配置公开一些Jest CLI选项:
import jest from "jest";
import { configPaths } from "../_paths";
import { Logger } from "../_utils";
process.env.BABEL_ENV = "test";
process.env.NODE_ENV = "test";
const defaultArgs = ["--config", configPaths.jestConfig];
const log = new Logger();
const resolveTestArgs = async args => {
let resolvedArgs = [];
if (args.file || args.f) {
return [args.file || args.f, ...defaultArgs];
}
// updates the snapshots
if (args.update || args.u) {
resolvedArgs = [...resolvedArgs, "--updateSnapshot"];
}
// tests the coverage
if (args.coverage || args.cov) {
resolvedArgs = [...resolvedArgs, "--coverage"];
}
// runs the watcher
if (args.watch || args.w) {
resolvedArgs = [...resolvedArgs, "--watch"];
}
// ci arg to update default snapshot feature
if (args.ci) {
resolvedArgs = [...resolvedArgs, "--ci"];
}
// tests only tests that have changed
if (args.changed || args.ch) {
resolvedArgs = [...resolvedArgs, "--onlyChanged"];
}
return [...defaultArgs, ...resolvedArgs];
};
export const test = async cliArgs => {
try {
const jestArgs = await resolveTestArgs(cliArgs);
jest.run(jestArgs);
} catch (error) {
log.error(error);
process.exit(1);
}
};
答案 2 :(得分:1)
如果你所有的配置都在 jest.config.js 中,你可以像这样编写代码:
const jest = require('jest')
jest.run([])
答案 3 :(得分:0)
这是我在How to run Jest programmatically in node.js (Jest JavaScript API)上的帖子中的示例。
这次使用TypeScript。
npm i -S jest-cli
npm i -D @types/jest-cli @types/jest
import {runCLI} from 'jest-cli';
import ProjectConfig = jest.ProjectConfig;
const projectRootPath = '/path/to/project/root';
// Add any Jest configuration options here
const jestConfig: ProjectConfig = {
roots: ['./dist/tests'],
testRegex: '\\.spec\\.js$'
};
// Run the Jest asynchronously
const result = await runCLI(jestConfig as any, [projectRootPath]);
// Analyze the results
// (see typings for result format)
if (result.results.success) {
console.log(`Tests completed`);
} else {
console.error(`Tests failed`);
}
另外,关于@PeterDanis的答案,我不确定在测试失败的情况下Jest是否会拒绝诺言。以我的经验,它将与result.results.success === false
一起出现。