JavaScript 单元测试

编写单元测试与编写代码本身一样重要:它有助于确保代码是根据给定的规范编写的,并且随着代码的发展保持正确。

测试框架

测试代码从测试框架开始。该框架提供了一定程度的抽象,使得以简单有效的方式编写测试成为可能。它还提供了一组工具来运行测试、做出断言并报告结果。

Odoo 开发人员使用名为 HOOT 的本土测试框架。使用自定义框架的主要原因是它允许我们根据需要进行扩展(标签系统、全局对象的模拟等)。

在该框架之上,我们构建了一组工具来帮助我们为 Web 客户端 (web_test_helpers) 编写测试,以及一个模拟服务器来模拟服务器端 (mock_server)。

您可以在下面找到每个部分的参考链接,以及包含编写测试的示例和最佳实践的部分。

设置

在学习如何编写测试之前,最好先从基础知识开始。以下步骤将确保测试运行程序正确选取您的测试文件。

请注意,在现有插件中,大多数步骤都可以跳过,因为可能已经设置了正确的文件夹结构和资源包。

  1. 在正确的**位置**写入文件:

    所有 JavaScript 测试文件应放在相关插件的 /static/tests 文件夹下(例如 /web/static/tests/env.test.js)。

  2. 使用正确的**名称**:

    测试文件必须以 .test.js 结尾。这不仅是一个约定,也是对运行者拾取测试文件的要求。所有其他 JavaScript 文件将被解释为生产代码(即要测试的代码)或测试帮助程序文件(例如 web_test_helpers)。

    注解

    需要注意的是,.hoot.js 文件有一个例外,它们不被视为测试文件,而是作为整个测试运行的全局模块,而其他 JavaScript 模块则为每个测试套件重新创建。由于这些模块的相同实例将在整个测试运行中运行,因此它们遵循严格的约束,例如限制导入或高级内存管理技术,以确保没有副作用影响测试。

  3. 调用右侧**bundle**中的文件:

    添加到正确文件夹中的测试文件必须包含在 web.assets_unit_tests 捆绑包中。为了便于使用,可以使用 glob 语法来导入所有测试和测试帮助程序文件:

    # Unit test files
    'web.assets_unit_tests': [
        'my_addon/static/tests/**/*',
    ],
    
  4. 前往右侧 URL

    要运行测试,您可以转到 /web/tests URL。

    小技巧

    可以通过 Debug menu ‣ Run Unit Tests 访问此页面。

编写测试

创建并包含测试文件后,就可以编写测试了。您可以参考以下文档部分来了解测试框架。