【问题标题】:Run Jasmine tests (coupled to DOM/jquery etc) via command line for CI通过命令行为 CI 运行 Jasmine 测试(耦合到 DOM/jquery 等)
【发布时间】:2019-12-04 20:00:27
【问题描述】:

我们有一组在本地 Web 服务器上成功运行的 Jasmine 测试。 http-server

我们希望在 TeamCity 构建过程中从命令行运行这些测试,不必启动网络服务器。

使用 --disable-web-security 标志使用 chrome 打开 html 文件会导致

加载模块脚本失败:服务器响应 “”的非 JavaScript MIME 类型。强制执行严格的 MIME 类型检查 用于每个 HTML 规范的模块脚本。

可能是因为 SpecRunner.html 文件中带有 type="module" 的脚本引用

<script src="../src/js/App/app.js" type="module"></script>

Jasmine 测试与 DOM/jQuery 耦合,因此它们需要在浏览器中运行。 SpecRunner html 页面包含 type="module" 的脚本引用。

如果有任何测试失败,我们如何在 TeamCity 构建期间运行这些测试并导致构建失败?

谢谢。

【问题讨论】:

  • 由于打开本地 html 文件时不涉及 Web 服务器,因此不确定如何添加 mime 类型。也许我们应该咬紧牙关,启动一个 Web 服务器,在浏览器中运行测试,检查控制台消息,看看在构建过程中是否有任何故障。

标签: jasmine continuous-integration jestjs teamcity jest-puppeteer


【解决方案1】:

这是我的解决方案。我们已经在使用 jest 进行反应测试和 jest docs

如果您使用 Jasmine 或类似 Jasmine 的 API(例如 Mocha), Jest 应该在很大程度上是兼容的,这使得它变得不那么复杂 迁移到。

  1. npm install jest puppeteer jest-puppeteer http-server

    • 开玩笑:使用 Jasmine API 运行测试
    • puppeteer:在无头 chrome 浏览器中运行测试
    • http-server:用于导航到 jasmine 规范运行器页面的本地网络服务器
    • jest-puppeteer:配置在运行测试之前启动本地服务器并在之后停止它
  2. 添加 jest-puppeteer-config.json 像this一样启动服务器

Jest Puppeteer 集成了一项功能,可以在以下情况下启动服务器 运行你的测试套件。测试时自动关闭服务器 完成了。

  1. 添加一个 jest-puppeteer 测试以导航到 Jasmine SpecRunner 页面并断言没有失败。

  2. 更新您的笑话配置docs

  3. 创建 npm 脚本以运行 jest 测试,然后在浏览器中运行 Jasmine 测试。

此时,应该可以在本地或构建服务器上从命令行运行浏览器 Jasmine 测试。

这是一个屏幕截图,显示了本地和 TeamCity 上的文件和测试运行结果。

我们如何在 TeamCity 构建期间运行这些测试并导致构建失败 是否有任何测试失败?

这个解决方案使我们能够以最小的努力恢复大约数百个与浏览器耦合的旧版 Jasmine 测试作为构建的一部分(无需更新测试)。

请随意提出替代方案。

【讨论】:

    猜你喜欢
    • 2016-11-03
    • 1970-01-01
    • 2014-02-18
    • 2013-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-25
    相关资源
    最近更新 更多