微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用 Jest (Javascript/Typescript) 测试 yargs 应用程序

如何解决如何使用 Jest (Javascript/Typescript) 测试 yargs 应用程序

我已经在 J​​est 存储库 here 上问过这个问题。并且还推送了一个示例应用程序 here 来重现该行为。但为了完整起见,这里是完整的故事:
本质上是这样的 (./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 add 命令需要两个参数。如果我通过正确的输入,它会给出正确的输出。这意味着一切正常。

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

describe("remote",() => {
  test("add",async () => {
    const argv = parser.parse("remote add foo",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 解析器时,解析器配置出现问题,因此 commands 目录中的任何内容都不会加载到解析器中。
如何使用 Jest 测试我的解析器?谢谢。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。