1

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

试运行成功图片

我们希望在 TeamCity 构建过程中从命令行运行这些测试,而无需启动 Web 服务器。

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

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

错误:加载模块脚本失败:服务器以非 JavaScript MIME 类型响应

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

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

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

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

谢谢。

4

1 回答 1

0

这是我的解决方案。我们已经在使用 jest 进行反应测试,并且jest 文档

如果您使用 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 像这样启动服务器

Jest Puppeteer 集成了在运行测试套件时启动服务器的功能。测试完成后它会自动关闭服务器。

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

  2. 更新您的笑话配置文档

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

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

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

package.json jest-config.js jest-puppeteer-config.js run-tests.js

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

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

随意提出替代方案。

于 2019-12-06T18:14:15.097 回答