菜单

测试

相关源文件

本文档概述了Markdown Here扩展中使用的测试框架和方法。它提供了关于测试如何构建、执行和扩展以确保代码质量和跨浏览器兼容性的技术信息。

概述

Markdown Here采用基于浏览器的测试系统,使用Mocha作为测试框架,Chai用于断言。这些测试旨在验证核心功能组件,包括HTML到Markdown的转换、渲染管道、用户偏好管理和核心切换功能。

来源:src/common/test/index.html1-54 src/common/test/test-prep.js1-7

测试框架架构

测试系统围绕一个中心HTML测试运行器组织,该运行器导入应用程序代码和测试文件。这种方法允许在与扩展实际运行时环境非常相似的环境中进行测试。

来源:src/common/test/index.html20-48

测试模块结构

每个测试文件都专注于扩展的特定组件,遵循Mocha BDD风格的语法,包含嵌套的describeit块。测试利用Chai的expect断言来验证功能。

来源:src/common/test/mdh-html-to-text-test.js14-202 src/common/test/options-store-test.js12-256

运行测试

测试在浏览器环境中执行,这允许在与扩展运行条件相似的环境中进行测试。

  1. 在网页浏览器中打开src/common/test/index.html
  2. 测试套件会自动运行所有测试模块
  3. 结果将使用Mocha的HTML报告器在浏览器中显示

为了开发目的,test/index.html中提供了一个更简单的测试环境,它创建了一个类似于电子邮件撰写区域的可编辑iframe。

来源:src/common/test/test-run.js1-13 test/index.html1-29

关键测试模块

HTML到文本转换测试

mdh-html-to-text-test.js文件测试了关键的HTML到Markdown转换功能,这对于在渲染和未渲染状态之间正确切换至关重要。

测试验证了

  • 正确处理代码块和行内代码中预渲染的链接
  • 正确处理引用风格的链接
  • div末尾换行符等边缘情况
  • 纯文本节点处理
  • 代码块中的特殊字符处理
  • 大HTML输入时的性能

该模块提供了辅助函数,用于测试普通转换(get())和检查未渲染的Markdown(check())。

来源:src/common/test/mdh-html-to-text-test.js22-38 src/common/test/mdh-html-to-text-test.js41-202

选项存储测试

options-store-test.js文件测试了扩展的偏好设置存储系统,该系统必须在不同的浏览器环境中保持一致工作。

测试验证了

  • 获取、设置和删除选项
  • 处理各种数据类型(空值、长字符串、对象、数组)
  • 默认值行为和升级
  • 从文件中获取默认值

来源:src/common/test/options-store-test.js17-253

核心功能测试

markdown-here-test.js文件测试了核心的markdownHere()函数,该函数在渲染和未渲染状态之间进行切换。它使用辅助函数来模拟用户操作并验证渲染结果。

来源:src/common/test/markdown-here-test.js22-115

通用逻辑测试

common-logic-test.js测试了实用工具函数,包括“忘记渲染”检测系统,该系统可防止用户意外发送未渲染的Markdown。

主要测试包括

  • 检索升级通知和提示
  • 检测表明用户正在编写Markdown的Markdown语法模式(如列表、代码、数学公式、强调、标题、链接)

来源:src/common/test/common-logic-test.js12-121

添加新测试

在Markdown Here中添加新功能或修复bug时,应创建相应的测试来验证其功能。以下是推荐的流程:

  1. 确定要修改的组件
  2. 创建或找到相应的测试文件
  3. 为该功能添加一个新的describe块(如果需要)
  4. 编写it块,测试正常功能和边缘情况
  5. 对于bug修复,编写能够捕获原始bug的测试

测试辅助函数

存在一些辅助函数可以使测试更容易

  • mdh-html-to-text-test.js中的MdhHtmlToText测试辅助函数,用于测试HTML到文本的转换
  • markdown-here-test.js中的渲染辅助函数,用于测试渲染过程
  • 使用jQuery的DOM操作工具,用于创建和检查测试元素

测试基础设施依赖

测试系统依赖于几个第三方库:

  • Mocha:JavaScript测试框架
  • Chai:断言库
  • jQuery:DOM操作
  • Underscore.js:实用工具函数

这些依赖项包含在测试运行器HTML中,无需单独安装。

来源:src/common/test/index.html37-40

最佳实践

使用Markdown Here测试系统时:

  1. 提交更改前务必运行完整的测试套件
  2. 为新功能添加测试以确保其按预期工作
  3. 为bug修复添加回归测试以防止问题再次发生
  4. 构建独立且不相互依赖的测试
  5. 使用描述性的测试名称来解释预期行为

通过遵循这些测试实践,Markdown Here扩展可以在各种浏览器、电子邮件客户端和不同的使用场景中保持其可靠性。