node.js - 是否可以测试 Jest 测试?

标签 node.js typescript testing jestjs

我想制作一个测试不同练习的工具。一项练习是单元测试。因此,我需要测试学生所做的测试是否是好的测试。例如,学生有以下代码:

export class HelloWorld {
  public static showHello(): string {
    return 'Hello World!';
  }
}

通过以下 Jest 测试:

import { HelloWorld } from '..';

describe(Hello World exercise, () => {
  test('Check function is defined', () => {
    expect(HelloWorld.showHello()).toBeDefined();
  });

  test('Empty input results in Hello World!', () => {
    expect(HelloWorld.showHello()).toBe('Hello World!');
  });
});

我怎样才能证明学生确实参加了这两项考试?我想过

export const firstTest = test()...

然后测试firstTest是否测试正确的东西。但缺点是您必须导出此解决方案的每个测试。

最佳答案

测试需要黑盒测试,这意味着您需要事先知道哪些测试是编写的(以及应该如何编写),或者您需要检查每个测试并为每个测试编写独特的测试。鉴于您正在尝试测试学生对测试的理解并以自动化方式执行此操作,我怀疑这两种选择是否合理。

但是,您可以使用多种启发式方法。我建议结合使用前 3 种方法。

  1. 定义一个公共(public)接口(interface),您的学生必须实现并为此公共(public)接口(interface)编写测试。这不会直接测试您学生的测试,但如果您的任何测试失败,则他们没有编写足够(质量)的测试。这些测试应该简单明了,您的学生应该关注这些测试。
  2. 使用代码覆盖工具,例如 istanbul .这不会直接测试测试的质量,但它确实让您相信测试确实触及了代码。
  3. 此方法受到我最近发现的一种称为“Adversarial Gamedays”的技术的启发(而非实现)。对于这种方法,你会在几个地方随机破坏学生的代码,假设是 10 个,然后让代码运行。很可能测试不会捕获您创建的所有错误,但它们应该捕获 x%,其中 x 是您确定的可接受的代码覆盖率。这些错误应该充分分布在整个程序中,以免利用一个单一的缺陷。这同时测试了数量和质量。
  4. 目视检查和/或手动测试。这种方法容易出错且耗时。如果您没有助教,这可能不是一个可行的选择。但是,如果您在这种方法上花费足够的时间,它是最彻底和最没有偏见的。

正如我所说,前 3 个选项的组合将是最佳选择。例如,为系统提供公共(public)接口(interface),运行代码覆盖工具,随机打破每个学生私有(private)实现的y区。

关于node.js - 是否可以测试 Jest 测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53320397/

相关文章:

javascript - 带有嵌套流的 flatMapConcat

javascript - ExpressJS : Strange String Comparation

javascript - 如何为 Twiml Nodejs 提供服务

javascript - 在提交表单上显示模态

javascript - 订阅后的 Angular 2 数组有元素但长度为 0

javascript - Protractor - 发送规范/套件名称作为参数

Django测试环境

node.js - nodejs websocket检测断开连接的套接字

typescript - 如何 "import"TypeScript 定义文件中的命名空间

c++ - 方便的断言检查策略