Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/480.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Jest AJAX单元测试不返回数据_Javascript_Jquery_Ajax_Jestjs - Fatal编程技术网

Javascript Jest AJAX单元测试不返回数据

Javascript Jest AJAX单元测试不返回数据,javascript,jquery,ajax,jestjs,Javascript,Jquery,Ajax,Jestjs,我试图使用Jest(用作参考)测试以下AJAX调用。AJAX调用应该发送到我的web服务并返回JSON数据,但测试失败并出现错误。测试在main.test.js中,我正在包管理器控制台(在Visual Studio中)中使用:npm test运行它 我已经尝试过使用XMLHttpRequest实现AJAX请求,但是测试仍然失败,出现了相同的错误,并且我没有返回任何数据。我还尝试设置参数async:false,但这会导致测试挂起而不完成 //main.js function getData(han

我试图使用Jest(用作参考)测试以下AJAX调用。AJAX调用应该发送到我的web服务并返回JSON数据,但测试失败并出现错误。测试在main.test.js中,我正在包管理器控制台(在Visual Studio中)中使用:
npm test
运行它

我已经尝试过使用XMLHttpRequest实现AJAX请求,但是测试仍然失败,出现了相同的错误,并且我没有返回任何数据。我还尝试设置参数async:false,但这会导致测试挂起而不完成

//main.js
function getData(handleData) {
     $.ajax({
        type: "POST",
        data: '{choice:"'+option+'"}',
        dataType: "json",
        url: "WebServiceGrid.asmx/WebserviceFunction",
        contentType: "application/json; charset=utf-8",
        success: function (response) {                                     
            handleData(response);            
        },       
        error: function (request, status, error) {
            alert(request.responseText);
        },       
    });

    function handleData(response) {
        return response;
    }
}
package.json(Jest设置)

//我正在setup-jest.js文件中包含jQuery:
const$=require('jquery');全局。$=global.jQuery=$;
我希望从我的web服务获取JSON数据,但我看到Jest测试失败,出现以下错误:

超时-在jest.setTimeout.Timeout指定的5000ms超时内未调用异步回调


我还尝试将Jest超时增加到5000ms以上,但这似乎没有帮助

我不知道
getData
如何独立工作;您正在声明一个
函数handleData
,该函数将隐藏同名参数。您的测试可能应该调用
getData
,而不是声明它?还要注意,所有这些代码都是服务器端代码,但jQuery是客户端库;它在浏览器中运行。节点也没有
警报
。使用而不是
$.ajax
。同样,据我所知,main.js
getData
根本无法正常运行;开坏代码的玩笑没有多大意义。这里有一个对我来说最简单的设置:对于您的第一条评论(您的测试可能应该调用getData,而不是声明它?)很抱歉,这是一个输入错误,声明应该是handleData而不是getData(我已经修复了它)。关于你的第二条评论,我实际上能够为客户端jQuery命令(如jQuery选择器、长度、select2等)编写jest测试并对其进行控制台操作?我不知道
getData
本身是如何工作的;您正在声明一个
函数handleData
,该函数将隐藏同名参数。您的测试可能应该调用
getData
,而不是声明它?还要注意,所有这些代码都是服务器端代码,但jQuery是客户端库;它在浏览器中运行。节点也没有
警报
。使用而不是
$.ajax
。同样,据我所知,main.js
getData
根本无法正常运行;开坏代码的玩笑没有多大意义。这里有一个对我来说最简单的设置:对于您的第一条评论(您的测试可能应该调用getData,而不是声明它?)很抱歉,这是一个输入错误,声明应该是handleData而不是getData(我已经修复了它)。关于您的第二条评论,我实际上能够为客户端jQuery命令(如jQuery选择器、长度、select2等)编写jest测试并进行控制台输出?
//main.test.js
test('verifies getData returns data', done => {
    function handleData(data) {
        expect(data).toBe(/*some JSON data*/); 
        done();
    }
    getData(handleData);
}
"devDependencies": {
    "jest": "^24.9.0",
    "jest-editor-support": "^25.0.1"
}
"jest": {
    "verbose": true,
    "setupFiles": [
      "./source/setup-jest.js"
    ],
},
"scripts": {
    "test": "jest --detectOpenHandles"
}