最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

在Mocha Test Reporter中使用Ajax

运维笔记admin13浏览0评论

在Mocha Test Reporter中使用Ajax

在Mocha Test Reporter中使用Ajax

我想将带有jQuery post的摩卡测试结果发送到我的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中

但是当我执行摩卡测试时,它会抛出一个异常,即$.ajax is not a function。我的研究没有发现任何有用的结果。 (而且我不使用jQuery的slim版本)知道我做错了什么吗?还是可以不使用$.ajax

回答如下:

在节点和浏览器中初始化jQuery

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

jQuery npm软件包的文档,您可以找到here,内容如下:

要使jQuery在Node中工作,需要一个带有文档的窗口。由于Node本身不存在这样的窗口,因此可以通过以下方式来模拟jsdom之类的工具。这对于进行测试很有用。

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

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);
});

与本文相关的文章

发布评论

评论列表(0)

  1. 暂无评论