javascript - 在 mocha 测试报告器中使用 ajax-post 失败

标签 javascript jquery node.js mocha.js

我很想用 jquery post 将我的 mocha 测试结果发送到我的 API。所以我写了一个自定义记者:

var mocha = require('mocha');
var $ = require('jquery');
module.exports = Reporter

function Reporter(runner) {
    mocha.reporters.Base.call(this, runner);
    var passes = 0;
    var failures = 0;

    runner.on('pass', function (test) {
        passes++;
    });

    runner.on('fail', function (test, err) {
        failures++;
    });

    runner.on('end', function () {
        data = {
            date: formatDate(new Date()),
            passed: passes,
            failed: failures
        }

       $.ajax({
            url: "https://localhost:8080/test/results",
            method: "POST",
            data: data,
            dataType: "json",
            success: function () {
                console.log("sent");
            },
            error: function () {
                console.log("failed");
            }
        });

    });
}

我使用了 npm i jquery 并将 "jquery": "^3.4.1" 添加到我的 package.json

但是当我执行 mocha 测试时,它抛出一个异常,即 $.ajax 不是一个函数。我的研究没有发现任何有用的结果。 (而且我不使用 jquery 的 slim 版本) 知道我做错了什么吗?或者我可以不为此使用 $.ajax 吗?

最佳答案

在 Node 和浏览器中初始化 jQuery

问题似乎在于在 Node 中初始化 jQuery,这与在浏览器中初始化不同。

jQuery npm 包的文档,你可以找到here , 表示如下:

For jQuery to work in Node, a window with a document is required. Since no such window exists natively in Node, one can be mocked by tools such as jsdom. This can be useful for testing purposes.

而不是简单地使用下面一行:

var $ = require('jquery'); // Would work in browser

您应该首先模拟 DOM,然后再初始化 jQuery:

require("jsdom").env("", function(err, window) {
    if (err) {
        console.error(err);
        return;
    }

    var $ = require("jquery")(window);
});

关于javascript - 在 mocha 测试报告器中使用 ajax-post 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56883993/

相关文章:

javascript - 如何删除完整的单词而不是javascript中的子词

javascript - 多个元素的jquery函数

php - 如何使用 Ajax 在同一个 PHP 文件中执行插入和选择

javascript oo 问题

node.js - 如何使用 AWS X-Ray 跟踪 lambda 调用 lambda?

node.js - 为什么 DynamoDB 使用 Limit 和 FilterExpression 扫描不返回符合过滤器要求的项目?

javascript - 计算 Javascript 的圈复杂度

jquery - Media Element Js 视频播放器无法正常播放

node.js - 如何在没有 sudo 的情况下修复 npm 抛出错误

来自 VBA 的 Javascript "Like"和 "*"表达式 Eqv