如何在 Jenkins 上运行的 Karma 单元测试中解决此错误:“找不到变量:jQuery”

Posted

技术标签:

【中文标题】如何在 Jenkins 上运行的 Karma 单元测试中解决此错误:“找不到变量:jQuery”【英文标题】:How to resolve this error in a Karma unit test, running on Jenkins: "Can't find variable: jQuery" 【发布时间】:2020-09-12 08:24:12 【问题描述】:

我已将 ui-sortable 库添加到 AngularJS 项目中,以在无序列表上实现拖放功能。项目使用bower管理UI库,bower.json同时包含jquery和jquery-ui


  "name": "fountain-inject",
  "version": "0.0.1",
  "dependencies": 
    "jquery": "3.5.1",
    "jquery-ui": "1.12.1",
    "angular": "1.7.9"
  

在 Windows 上本地构建时,所有单元测试都通过,但在 Linux 上的 Jenkins 中构建时,所有单元测试都通过,但随后报告此错误,并且构建失败

[INFO] PhantomJS 2.1.1 (Linux 0.0.0) ERROR
[INFO]   An error was thrown in afterAll
[INFO]   ReferenceError: Can't find variable: jQuery
[INFO]   bower_components/jquery-ui/jquery-ui.js:14
[INFO] PhantomJS 2.1.1 (Linux 0.0.0): Executed 741 of 742 (skipped 1) ERROR (13.945 secs / 13.232 secs)

构建本身是多模块 maven 项目的前端模块。它使用frontend maven plugin 安装节点,拉取凉亭和节点依赖项,然后运行 ​​gulp 构建文件,包括单元测试

<plugin>
    <groupId>com.github.eirslett</groupId>
    <artifactId>frontend-maven-plugin</artifactId>
    <version>1.3</version>
    <executions>
        <execution>
            <id>install node and npm</id>
            <goals>
                <goal>install-node-and-npm</goal>
            </goals>
            <phase>generate-resources</phase>
            <configuration>
                <nodeVersion>v12.13.1</nodeVersion>
            </configuration>
        </execution>

        <execution>
            <id>npm install</id>
            <goals>
                <goal>npm</goal>
            </goals>
            <phase>generate-resources</phase>
            <configuration>
                <arguments>install</arguments>
            </configuration>
        </execution>

        <execution>
            <id>bower install</id>
            <goals>
                <goal>bower</goal>
            </goals>
            <configuration>
                <arguments>install</arguments>
            </configuration>
        </execution>

        <execution>
            <id>gulp build</id>
            <goals>
                <goal>gulp</goal>
            </goals>
            <phase>test-compile</phase>
            <configuration>
                <arguments>build</arguments>
            </configuration>
        </execution>

        <execution>
            <id>gulp test</id>
            <phase>test</phase>
            <goals>
                <goal>gulp</goal>
            </goals>
            <configuration>
                <arguments>test --no-notification</arguments>
            </configuration>
        </execution>
    </executions>
</plugin>

有谁知道如何解决这个问题?

【问题讨论】:

你不需要在构建服务器上bower install 吗? 问题用 maven pom 更新,包括凉亭安装 【参考方案1】:

当我将 bower_components/jQuery 目录添加到存储库时,该问题已解决,并且构建完成。出于某种原因,构建机器在从 Internet 检索 bower 依赖项时遇到问题,但构建本身所需的节点依赖项没有问题。

【讨论】:

以上是关于如何在 Jenkins 上运行的 Karma 单元测试中解决此错误:“找不到变量:jQuery”的主要内容,如果未能解决你的问题,请参考以下文章

使用 Jenkins 从 Karma.js 获得百分比覆盖率

grunt karma 覆盖在 jenkins 上失败,但在 windows/unix 上有效

Karma 没有在 Jenkins CI 中运行,找不到模块 'karma-jasmine'

Karma 无法捕获 PhantomJS

在我的 JSPM 包上使用 JSPM 404 进行 Karma/Jasmine 单元测试

超时如何在 karma 中运行的角度测试中工作