BioforestChain / pkgm

5 stars 0 forks source link

提案:bfsp/bfsw run 的功能展望 #21

Open Gaubee opened 2 years ago

Gaubee commented 2 years ago

run指令,目的是执行代码。包括单元测试、压力测试、运行指令等待。

本质上 tsc:watch 就是其中一种指令。

1. 可交互面板

bfsp/bfsw run 本质和 bfsp/bfsw dev 没有差别。因为在该模式下,我们要强制开启dev:watch工作,因为我们是面向typescript编程。所以要确保所有js文件都是实时编译出来的。

只是启动后打开了run面板。编译通过之后,开始进行交互。 如果用户没有提供参数指令,那么进入询问模式: 此时列出所有项目的所有可测试项所有项目。用户可以通过勾选的方式进行测试(默认全部勾选)。

在勾选完后,回车,开始测试。

首先屏幕应该打印“带参数的run指令”给用户,方便用户下一次直接使用这个命令直接执行(如果是进行一次性执行,不需要dev:watch。只需要执行一次即可退出)。 此时所有的终端输出同步打印到 .bfsp/log/${ARGS-HASH}.${DATE-TIME}.test.log 文件中。这里的ARGS-HASH代表着测试参数的MD5-HASH,从而方便归纳测试报告。 run执行完成后,告知用户已经执行完成。但此时不会退出控制台,否则控制台会直接清空。要给用户浏览、复制日志输出的机会。用户也可以继续重新开始新的run。

如果时一次性执行,那么不会进入 blessed 终端模式,而是直接进行日志输出。

2. 实时执行

用户可以选中部分任务进行“实时执行”,此时我们将任务分为两类:

  1. 一次性任务

    只要有文件发生改动就可以自动重新运行指令。

  2. 持续性任务

    我们将变动的文件推给持续性任务,它自己决策接下来的运行

对于一次性任务,我们很难知道每一个测试函数会引用到哪些js文件相关联,这些文件甚至是跨项目的,所以目前来说,最简单的方式是只要执行了编译输出,那么就将测试测试的执行推入队列中。所以,我们能做的就是搞一次性任务运行队列来正确分配测试资源

3. 常见的任务种类

  1. 单元测试验证正确性
  2. 压力测试对比性能
  3. http-server
  4. 取代nodemon

4. bfsp/bfsw run

对于test指令 ,我们可以直接建立在run指令之上,差别就只是一个过滤器而已