使用jest.run()或jest.runCLI()运行所有测试或以编程方式运行jest的方法

时间:2018-06-12 23:32:57

标签: jestjs

如何使用 get_new_b: 52 using function: 52 new_b: 55 using subroutine: 55 jest.run()以编程方式运行所有测试?我想作为一个论点提供什么?

我试图查找有关它们的文档但失败了。

如果上述功能不起作用,如果我想以编程方式运行jest,我应该调用什么?

4 个答案:

答案 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,将传递一个对象,其中包含globalConfigresults个键。看看他们,也许它会帮助你。

答案 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一起出现。