测试

这些单元测试针对的是 Google 跟踪代码管理器的自定义模板,可帮您验证自己模板的功能。您可以为每个模板创建一组无需部署代码即可运行的测试,这样您就可在开发过程中持续测试模板的行为。每次测试都会提供示例输入值、模拟函数调用和断言代码行为。

限制

  • 单元测试不会检查验证规则,但您可以使用运行代码按钮手动检查验证。
  • 在单元测试中,权限检查不会发生在模拟的 API 上。

本指南将向您逐步介绍如何编写自定义模板的单元测试。本示例创建了一个变量模板,该模板会接受输入字符串,然后返回该字符串的大写形式。

  1. 创建新的变量模板。点击左侧导航栏中的模板,然后点击变量模板部分下的新建

  2. 点击字段

  3. 点击添加字段,然后选择文本输入。将该字段命名为 text1,然后将显示名设置为“Text 1”。

  4. 代码标签中,将默认代码替换为下列在沙盒中运行的 JavaScript:

    let input = data.text1;
    return input.toUpperCase();
    
  5. 点击测试以打开测试标签。

  6. 点击添加测试,然后将测试名称从“Untitled test 1”更改为“Handles strings”。

  7. 点击展开图标 (),即可查看该测试的在沙盒中运行的 JavaScript 编辑器。将代码替换为下列在沙盒中运行的 JavaScript:

    // Call runCode to run the template's code with a lowercase string
    let variableResult = runCode({text1: 'this is a test'});
    // Validate that the result of runCode is an uppercase string.
    assertThat(variableResult).isEqualTo('THIS IS A TEST');
    

    此测试会将字符串 'this is a test' 传递给变量,并验证该变量是否返回预期的 'THIS IS A TEST' 字符串值。runCode API 用于运行代码标签中的模板代码。runCode 的参数是一个可用作全局数据的对象。assertThat API 会返回一个对象,可用于顺畅地对主题的值进行断言。

  8. 点击 ▶ 运行测试可运行测试。测试的输出将显示在控制台中。

    点击 ▶ 运行测试按钮后,系统就会以显示的顺序运行该模板中启用的所有测试。如要更改该顺序,请使用拖动图标 (⠿)。点击测试名称左侧的圆圈,可暂时启用或停用相应测试。要运行单个测试,您可以将鼠标移动到该测试上方,然后点击显示的 ▶ 按钮。

    控制台应输出运行的总测试数和失败的测试数(如果有)。在本测试用例中,仅运行了一个测试,该测试应该会通过。

  9. 再次点击添加测试,添加第二个测试。将该测试名称从“Untitled test 2”更改为“Handles undefined”。

  10. 点击该测试即可将其展开,并显示在沙盒中运行的 JavaScript 编辑器。在编辑器中输入在沙盒中运行的 JavaScript:

    let variableResult = runCode({});
    assertThat(variableResult).isEqualTo(undefined);
    
  11. 点击 ▶ 运行测试,以便一次性运行所有测试。测试的输出将显示在控制台中。

    “Handles undefined”测试应会失败。恭喜,您发现了一个 bug!

  12. 点击代码,以返回并修改该模板的在沙盒中运行的 JavaScript 代码。更新在沙盒中运行的 JavaScript,如下所示:

    const getType = require('getType');
    
    let input = data.text1;
    if (getType(input) !== 'string') {
      return input;
    }
    return input.toUpperCase();
    

    更新后的代码遵循了代码使用前 input 变量的最佳验证做法。

  13. 点击测试返回测试用例列表。

  14. 点击 ▶ 运行测试,再次运行所有测试用例。这次,“Handles undefined”测试应会通过。

  15. 点击保存,然后关闭“模板编辑器”。