2

我已经在这里问了关于 Jest 存储库的问题。并且还在这里推送了一个示例应用程序来重现该行为。但为了完整起见,这里是完整的故事:
本质上是这样的(./parsers.ts):

import yargs from "yargs";

export const parser = yargs
  .strict(true)
  .help()
  .commandDir("cmds")
  .demandCommand(1)
  .recommendCommands();

cmds文件夹中,有一个remote.ts

import { Argv } from "yargs";

export const command = "remote <command>";
export const describe = "Manage set of tracked repos";
export const handler = (yargs: Argv<any>) => {};
export const builder = (yargs: Argv<any>) => {
  return yargs
    .commandDir("remote_cmds")
    .demandCommand(1, 1)
    .recommendCommands();
};

然后是add.ts

import { Argv } from "yargs";

export const command = "add <name> <url>";
export const handler = (yargs: Argv<any>): void => {};
export const describe = "Add remote named <name> for repo at url <url>";
export const builder = (yargs: Argv<any>): Argv => {
  return yargs.demandCommand(0, 0);
};

现在我还有两个文件:

// index.ts
import { parser } from "./parsers";
import { Arguments } from "yargs";

parser.parse("remote add foo", (err, argv, output) => {
  console.log("parsed argv: %s", JSON.stringify(argv));
  if (err) console.log("ERROR\n" + err);
  if (output) console.log("OUTPUT\n" + output);
});

当我运行它时,它失败了,这是正确的。因为remote addcommand 需要两个参数。如果我通过正确的输入,它会给出正确的输出。意味着一切正常。

// parsers.test.ts
import { Arguments } from "yargs";
import { parser } from "./parsers";

describe("remote", () => {
  test("add", async () => {
    const argv = parser.parse("remote add foo", (err, argv, output) => {
      console.log(JSON.stringify(argv));
      if (err) console.log("ERROR\n" + err);
      if (output) console.log("OUTPUT\n" + output);
    });
    expect(argv.name).toEqual("foo");
  });
});

Jest 配置也是:

module.exports = {
  transform: {
    "^.+\\.ts?$": "ts-jest",
  },
  testEnvironment: "node",
  testRegex: "./src/.*\\.(test|spec)?\\.(ts|ts)$",
  moduleFileExtensions: ["ts", "tsx", "js", "jsx", "json", "node"],
  roots: ["<rootDir>/src"],
};

但是当我运行上面的测试时,它完全没有失败,就好像解析器没有配置一样。(有趣的是,断言失败了,因为foo它没有被提取为一个属性argv,再次显示解析器没有获取cmds文件夹内的配置。)

不确定这是错误还是功能;在测试 yargs 解析器时,解析器配置出现问题,因此命令 目录中的任何内容都不会加载到解析器中。
如何使用 Jest 测试我的解析器?谢谢。

4

0 回答 0