我很想用 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/